summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaCXX/vararg-non-pod.cpp
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
commitc75d1a10985a949307ece6432c3b7248597314ed (patch)
treedd50a9cf176c63f1c8eedae922c8aadcdc724883 /clang/test/SemaCXX/vararg-non-pod.cpp
parent29386fb10d55c532e53dc1490b21fd6ff4367176 (diff)
downloadbcm5719-llvm-c75d1a10985a949307ece6432c3b7248597314ed.tar.gz
bcm5719-llvm-c75d1a10985a949307ece6432c3b7248597314ed.zip
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 llvm-svn: 132979
Diffstat (limited to 'clang/test/SemaCXX/vararg-non-pod.cpp')
-rw-r--r--clang/test/SemaCXX/vararg-non-pod.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/clang/test/SemaCXX/vararg-non-pod.cpp b/clang/test/SemaCXX/vararg-non-pod.cpp
index df0080fac94..3ca07b0215c 100644
--- a/clang/test/SemaCXX/vararg-non-pod.cpp
+++ b/clang/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);
+}
+
OpenPOWER on IntegriCloud