diff options
author | David Majnemer <david.majnemer@gmail.com> | 2011-06-14 05:17:32 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2011-06-14 05:17:32 +0000 |
commit | 0adde128d96a73864569516e684faa570e3c0333 (patch) | |
tree | 382223e7cdcd779125ca2667f8e2cf9e701be516 /test | |
parent | 2eccb672799d19fb535ce349566fea6729cbb891 (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.c | 6 | ||||
-rw-r--r-- | test/SemaCXX/vararg-non-pod.cpp | 18 | ||||
-rw-r--r-- | test/SemaTemplate/instantiate-expr-3.cpp | 9 |
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); - } -}; |