aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2011-06-14 05:17:32 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2011-06-14 05:17:32 +0000
commit0adde128d96a73864569516e684faa570e3c0333 (patch)
tree382223e7cdcd779125ca2667f8e2cf9e701be516 /test
parent2eccb672799d19fb535ce349566fea6729cbb891 (diff)
Properly diagnose using abstract and incomplete types in va_arg
- Move a test from test/SemaTemplate/instantiate-expr-3.cpp, it did not belong there - Incomplete and abstract types are considered hard errors git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@132979 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r--test/Sema/varargs.c6
-rw-r--r--test/SemaCXX/vararg-non-pod.cpp18
-rw-r--r--test/SemaTemplate/instantiate-expr-3.cpp9
3 files changed, 24 insertions, 9 deletions
diff --git a/test/Sema/varargs.c b/test/Sema/varargs.c
index e399f89ae0..820567777c 100644
--- a/test/Sema/varargs.c
+++ b/test/Sema/varargs.c
@@ -61,3 +61,9 @@ void f7(int a, ...) {
__builtin_va_end(ap);
}
+void f8(int a, ...) {
+ __builtin_va_list ap;
+ __builtin_va_start(ap, a);
+ (void)__builtin_va_arg(ap, void); // expected-error {{second argument to 'va_arg' is of incomplete type 'void'}}
+ __builtin_va_end(ap);
+}
diff --git a/test/SemaCXX/vararg-non-pod.cpp b/test/SemaCXX/vararg-non-pod.cpp
index df0080fac9..3ca07b0215 100644
--- a/test/SemaCXX/vararg-non-pod.cpp
+++ b/test/SemaCXX/vararg-non-pod.cpp
@@ -101,3 +101,21 @@ void t6(Foo somearg, ... ) {
__builtin_va_start(list, somearg);
}
+void t7(int n, ...) {
+ __builtin_va_list list;
+ __builtin_va_start(list, n);
+ (void)__builtin_va_arg(list, C); // expected-warning{{second argument to 'va_arg' is of non-POD type 'C'}}
+ __builtin_va_end(list);
+}
+
+struct Abstract {
+ virtual void doit() = 0; // expected-note{{unimplemented pure virtual method}}
+};
+
+void t8(int n, ...) {
+ __builtin_va_list list;
+ __builtin_va_start(list, n);
+ (void)__builtin_va_arg(list, Abstract); // expected-error{{second argument to 'va_arg' is of abstract type 'Abstract'}}
+ __builtin_va_end(list);
+}
+
diff --git a/test/SemaTemplate/instantiate-expr-3.cpp b/test/SemaTemplate/instantiate-expr-3.cpp
index 1febd282cc..ca88b00300 100644
--- a/test/SemaTemplate/instantiate-expr-3.cpp
+++ b/test/SemaTemplate/instantiate-expr-3.cpp
@@ -117,12 +117,3 @@ struct VaArg1 {
template struct VaArg1<__builtin_va_list, int>;
template struct VaArg1<int, int>; // expected-note{{instantiation}}
-
-struct VaArg2 {
- virtual void f(int n, ...) {
- __builtin_va_list va;
- __builtin_va_start(va, n);
- (void)__builtin_va_arg(va, VaArg2); // expected-error {{second argument to 'va_arg' is of non-POD type 'VaArg2'}}
- __builtin_va_end(va);
- }
-};