diff options
| author | Douglas Gregor <dgregor@apple.com> | 2010-11-05 22:21:31 +0000 |
|---|---|---|
| committer | Douglas Gregor <dgregor@apple.com> | 2010-11-05 22:21:31 +0000 |
| commit | 266bb5fd5b07e552f33109325c7cf5cc3b91d553 (patch) | |
| tree | a9c8cd503c74dc7a1a47623c0b9e0b4a28a70ba6 /clang/lib/Sema/SemaDeclCXX.cpp | |
| parent | b0ca9eb294f95c6839f862d4158c4c5e7a063ac7 (diff) | |
| download | bcm5719-llvm-266bb5fd5b07e552f33109325c7cf5cc3b91d553.tar.gz bcm5719-llvm-266bb5fd5b07e552f33109325c7cf5cc3b91d553.zip | |
Check for an invalid field earlier in a constructor's initialization
of that field. Otherwise, we can end up building and later trying to
instantiate a dependent member initializer that will fail at
instantiation time.
Unfortunately, I've only managed to trigger this bug with very large
sources, so there's no test case :(
llvm-svn: 118306
Diffstat (limited to 'clang/lib/Sema/SemaDeclCXX.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index f1daef0ee79..b33261e4ea1 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -1252,6 +1252,9 @@ Sema::BuildMemberInitializer(FieldDecl *Member, Expr **Args, unsigned NumArgs, SourceLocation IdLoc, SourceLocation LParenLoc, SourceLocation RParenLoc) { + if (Member->isInvalidDecl()) + return true; + // Diagnose value-uses of fields to initialize themselves, e.g. // foo(foo) // where foo is not also a parameter to the constructor. @@ -1294,9 +1297,6 @@ Sema::BuildMemberInitializer(FieldDecl *Member, Expr **Args, } - if (Member->isInvalidDecl()) - return true; - // Initialize the member. InitializedEntity MemberEntity = InitializedEntity::InitializeMember(Member, 0); |

