summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaCXX/vararg-non-pod.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-12-12 07:57:52 +0000
committerDouglas Gregor <dgregor@apple.com>2009-12-12 07:57:52 +0000
commitfab31f47b25d78dfd19dc08a7ad399936c6fbf49 (patch)
treed3c257911c8d9697ba13ecfa9def8d62c874ddd2 /clang/test/SemaCXX/vararg-non-pod.cpp
parentc2744f5adda44de6a728204a3634cff6ab7cc674 (diff)
downloadbcm5719-llvm-fab31f47b25d78dfd19dc08a7ad399936c6fbf49.tar.gz
bcm5719-llvm-fab31f47b25d78dfd19dc08a7ad399936c6fbf49.zip
When certain diagnostics involving run-time behavior would be emitted
in a potentially potentially evaluated context, queue those diagnostics and only emit them if the context ends up being potentially evaluated. This completes the fix for PR5761. llvm-svn: 91213
Diffstat (limited to 'clang/test/SemaCXX/vararg-non-pod.cpp')
-rw-r--r--clang/test/SemaCXX/vararg-non-pod.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/clang/test/SemaCXX/vararg-non-pod.cpp b/clang/test/SemaCXX/vararg-non-pod.cpp
index db519d71611..f913531a27d 100644
--- a/clang/test/SemaCXX/vararg-non-pod.cpp
+++ b/clang/test/SemaCXX/vararg-non-pod.cpp
@@ -75,3 +75,16 @@ class Foo {
int Helper(...);
const int size = sizeof(Helper(Foo()));
+
+namespace std {
+ class type_info { };
+}
+
+struct Base { virtual ~Base(); };
+Base &get_base(...);
+int eat_base(...);
+
+void test_typeid(Base &base) {
+ (void)typeid(get_base(base)); // expected-warning{{cannot pass object of non-POD type 'struct Base' through variadic function; call will abort at runtime}}
+ (void)typeid(eat_base(base)); // okay
+}
OpenPOWER on IntegriCloud