summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaDeclCXX.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2010-11-05 22:21:31 +0000
committerDouglas Gregor <dgregor@apple.com>2010-11-05 22:21:31 +0000
commit266bb5fd5b07e552f33109325c7cf5cc3b91d553 (patch)
treea9c8cd503c74dc7a1a47623c0b9e0b4a28a70ba6 /clang/lib/Sema/SemaDeclCXX.cpp
parentb0ca9eb294f95c6839f862d4158c4c5e7a063ac7 (diff)
downloadbcm5719-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.cpp6
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);
OpenPOWER on IntegriCloud