diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-12-23 21:06:06 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-12-23 21:06:06 +0000 |
commit | 721fb2b6e4059d5054428ac13fee36dfab9962ef (patch) | |
tree | f7973d0684e4470ea4891a0e6bdde5356175e11d /clang/test | |
parent | b8e6dc88bb6467cb09a7707d22996d7b24d01123 (diff) | |
download | bcm5719-llvm-721fb2b6e4059d5054428ac13fee36dfab9962ef.tar.gz bcm5719-llvm-721fb2b6e4059d5054428ac13fee36dfab9962ef.zip |
Diagnose the use of incomplete types in C++ typeid expressions
llvm-svn: 92045
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/SemaCXX/typeid.cpp | 8 | ||||
-rw-r--r-- | clang/test/SemaTemplate/instantiate-expr-4.cpp | 7 |
2 files changed, 11 insertions, 4 deletions
diff --git a/clang/test/SemaCXX/typeid.cpp b/clang/test/SemaCXX/typeid.cpp index 43403105759..7960cac7831 100644 --- a/clang/test/SemaCXX/typeid.cpp +++ b/clang/test/SemaCXX/typeid.cpp @@ -14,3 +14,11 @@ void g() { (void)typeid(int); } + +struct X; // expected-note 3{{forward declaration}} + +void g1(X &x) { + (void)typeid(X); // expected-error{{'typeid' of incomplete type 'struct X'}} + (void)typeid(X&); // expected-error{{'typeid' of incomplete type 'struct X'}} + (void)typeid(x); // expected-error{{'typeid' of incomplete type 'struct X'}} +} diff --git a/clang/test/SemaTemplate/instantiate-expr-4.cpp b/clang/test/SemaTemplate/instantiate-expr-4.cpp index 99bbbf7a162..c524e958f8a 100644 --- a/clang/test/SemaTemplate/instantiate-expr-4.cpp +++ b/clang/test/SemaTemplate/instantiate-expr-4.cpp @@ -133,7 +133,7 @@ struct Throw1 { } }; -struct Incomplete; // expected-note{{forward}} +struct Incomplete; // expected-note 2{{forward}} template struct Throw1<int>; template struct Throw1<int*>; @@ -143,7 +143,6 @@ template struct Throw1<Incomplete*>; // expected-note{{instantiation}} // typeid expressions // --------------------------------------------------------------------- -// FIXME: This should really include <typeinfo>, but we don't have that yet. namespace std { class type_info; } @@ -154,7 +153,7 @@ struct TypeId0 { if (ptr) return typeid(ptr); else - return typeid(T); + return typeid(T); // expected-error{{'typeid' of incomplete type 'struct Incomplete'}} } }; @@ -163,7 +162,7 @@ struct Abstract { }; template struct TypeId0<int>; -template struct TypeId0<Incomplete>; +template struct TypeId0<Incomplete>; // expected-note{{instantiation of member function}} template struct TypeId0<Abstract>; // --------------------------------------------------------------------- |