diff options
author | Chris Lattner <sabre@nondot.org> | 2009-12-31 03:10:55 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-12-31 03:10:55 +0000 |
commit | 8c3f89032c8822c443fb8a1633d297b60e5ca90c (patch) | |
tree | df2f7334dec128b83c11bd537b3e756c9c4023c8 | |
parent | 0814809e5bc27cccd59b63e99ab1eb52042dc13c (diff) |
improve diagnostics for case when a field type is unknown by
not emitting a follow-on error about 'int', which the user
never wrote. PR5924.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@92339 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Sema/SemaDeclCXX.cpp | 3 | ||||
-rw-r--r-- | test/SemaCXX/illegal-member-initialization.cpp | 10 |
2 files changed, 12 insertions, 1 deletions
diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index ab90a80cab..f1474cd979 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -1155,7 +1155,8 @@ Sema::BuildMemberInitializer(FieldDecl *Member, Expr **Args, } else NewExp = (Expr*)Args[0]; - if (PerformCopyInitialization(NewExp, FieldType, AA_Passing)) + if (!Member->isInvalidDecl() && + PerformCopyInitialization(NewExp, FieldType, AA_Passing)) return true; Args[0] = NewExp; } diff --git a/test/SemaCXX/illegal-member-initialization.cpp b/test/SemaCXX/illegal-member-initialization.cpp index ceefa5d1b7..1890dbc9b5 100644 --- a/test/SemaCXX/illegal-member-initialization.cpp +++ b/test/SemaCXX/illegal-member-initialization.cpp @@ -20,3 +20,13 @@ struct X { B& b; // expected-note{{declared at}} const B cb; // expected-note{{declared at}} }; + + +// PR5924 +struct bar {}; +bar xxx(); + +struct foo { + foo_t a; // expected-error {{unknown type name 'foo_t'}} + foo() : a(xxx()) {} // no error here. +}; |