diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-10-30 01:06:26 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2010-10-30 01:06:26 +0000 |
commit | d86132d52c1dd99ad5519abaad92533712692a8b (patch) | |
tree | 505f005cfd34e5de348296ec854c6a72f04fd835 | |
parent | 6a622dfde49ff06df4e0487fa9782a9a137971ac (diff) |
Don't remove the init expression from the initializer list if it had a semantic error.
We already flag the error with InitListChecker's hadError and we mess up the AST unnecessarily.
Fixes rdar://8605381.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@117760 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Sema/SemaInit.cpp | 1 | ||||
-rw-r--r-- | test/SemaCXX/crashes.cpp | 15 |
2 files changed, 15 insertions, 1 deletions
diff --git a/lib/Sema/SemaInit.cpp b/lib/Sema/SemaInit.cpp index 4e4558479a..616b2a0bf5 100644 --- a/lib/Sema/SemaInit.cpp +++ b/lib/Sema/SemaInit.cpp @@ -723,7 +723,6 @@ void InitListChecker::CheckSubElementType(const InitializedEntity &Entity, // PerformCopyInitialization produce the appropriate diagnostic. SemaRef.PerformCopyInitialization(Entity, SourceLocation(), SemaRef.Owned(expr)); - IList->setInit(Index, 0); hadError = true; ++Index; ++StructuredIndex; diff --git a/test/SemaCXX/crashes.cpp b/test/SemaCXX/crashes.cpp index 9da0b82bab..53eecb6c14 100644 --- a/test/SemaCXX/crashes.cpp +++ b/test/SemaCXX/crashes.cpp @@ -26,3 +26,18 @@ template<typename T> struct a : T { int aa() { return p; } // expected-error{{use of undeclared identifier 'p'}} }; }; + +// rdar://8605381 +namespace rdar8605381 { +struct X {}; + +struct Y { // expected-note{{candidate}} + Y(); +}; + +struct { + Y obj; +} objs[] = { + new Y // expected-error{{no viable conversion}} +}; +} |