summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaelyn Takata <rikka@google.com>2015-01-21 00:04:19 +0000
committerKaelyn Takata <rikka@google.com>2015-01-21 00:04:19 +0000
commit21a886936b796752acf1db1b7ed5f8aa06b2b771 (patch)
tree5d5dcd425baeea439c0c4def2cdb52569fae4aea
parentf5dcc1cbe6b03b401e8026775ef1ab7356c7056c (diff)
downloadbcm5719-llvm-21a886936b796752acf1db1b7ed5f8aa06b2b771.tar.gz
bcm5719-llvm-21a886936b796752acf1db1b7ed5f8aa06b2b771.zip
Correct all typos in the initialization arguments, even if one could not
be corrected. This fixes PR22250, which exposed the bug where if there's more than one TypoExpr in the arguments, once one failed to be corrected none of the TypoExprs after it would be handled at all thanks to an early return. llvm-svn: 226624
-rw-r--r--clang/lib/Sema/SemaDecl.cpp7
-rw-r--r--clang/test/SemaCXX/typo-correction-delayed.cpp8
2 files changed, 12 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 8fbe82fd881..cd6ff6ce582 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -8841,11 +8841,12 @@ void Sema::AddInitializerToDecl(Decl *RealDecl, Expr *Init,
});
if (Res.isInvalid()) {
VDecl->setInvalidDecl();
- return;
- }
- if (Res.get() != Args[Idx])
+ } else if (Res.get() != Args[Idx]) {
Args[Idx] = Res.get();
+ }
}
+ if (VDecl->isInvalidDecl())
+ return;
InitializationSequence InitSeq(*this, Entity, Kind, Args);
ExprResult Result = InitSeq.Perform(*this, Entity, Kind, Args, &DclT);
diff --git a/clang/test/SemaCXX/typo-correction-delayed.cpp b/clang/test/SemaCXX/typo-correction-delayed.cpp
index 454a8b365c3..f09dd330dbb 100644
--- a/clang/test/SemaCXX/typo-correction-delayed.cpp
+++ b/clang/test/SemaCXX/typo-correction-delayed.cpp
@@ -167,3 +167,11 @@ void MovePointer(Pointer &Click, int x, int y) { // expected-note 2 {{'Click' d
click.set_xpos(x); // expected-error {{use of undeclared identifier 'click'; did you mean 'Click'?}}
click.set_ypos(x); // expected-error {{use of undeclared identifier 'click'; did you mean 'Click'?}}
}
+
+namespace PR22250 {
+// expected-error@+4 {{use of undeclared identifier 'size_t'; did you mean 'sizeof'?}}
+// expected-error-re@+3 {{use of undeclared identifier 'y'{{$}}}}
+// expected-error-re@+2 {{use of undeclared identifier 'z'{{$}}}}
+// expected-error@+1 {{expected ';' after top level declarator}}
+int getenv_s(size_t *y, char(&z)) {}
+}
OpenPOWER on IntegriCloud