r236682 - When performing delayed typo correction in a for-range loop's variable
Kaelyn Takata
rikka at google.com
Wed May 6 17:11:02 PDT 2015
Author: rikka
Date: Wed May 6 19:11:02 2015
New Revision: 236682
URL: http://llvm.org/viewvc/llvm-project?rev=236682&view=rev
Log:
When performing delayed typo correction in a for-range loop's variable
declaration, ensure the loop variable is properly marked as invalid when
it is an "auto" variable.
Modified:
cfe/trunk/lib/Sema/SemaStmt.cpp
cfe/trunk/test/SemaCXX/typo-correction-cxx11.cpp
Modified: cfe/trunk/lib/Sema/SemaStmt.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaStmt.cpp?rev=236682&r1=236681&r2=236682&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaStmt.cpp (original)
+++ cfe/trunk/lib/Sema/SemaStmt.cpp Wed May 6 19:11:02 2015
@@ -1828,6 +1828,15 @@ Sema::ActOnObjCForCollectionStmt(SourceL
/// \return true if an error occurs.
static bool FinishForRangeVarDecl(Sema &SemaRef, VarDecl *Decl, Expr *Init,
SourceLocation Loc, int DiagID) {
+ if (Decl->getType()->isUndeducedType()) {
+ ExprResult Res = SemaRef.CorrectDelayedTyposInExpr(Init);
+ if (!Res.isUsable()) {
+ Decl->setInvalidDecl();
+ return true;
+ }
+ Init = Res.get();
+ }
+
// Deduce the type for the iterator variable now rather than leaving it to
// AddInitializerToDecl, so we can produce a more suitable diagnostic.
QualType InitType;
Modified: cfe/trunk/test/SemaCXX/typo-correction-cxx11.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/typo-correction-cxx11.cpp?rev=236682&r1=236681&r2=236682&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/typo-correction-cxx11.cpp (original)
+++ cfe/trunk/test/SemaCXX/typo-correction-cxx11.cpp Wed May 6 19:11:02 2015
@@ -23,3 +23,12 @@ void test(int aaa, int bbb, int thisvar)
int thatval = aaa * (bbb + thatvar); // expected-error {{use of undeclared identifier 'thatvar'; did you mean 'thisvar'?}}
}
}
+
+namespace PR18854 {
+void f() {
+ for (auto&& x : e) { // expected-error-re {{use of undeclared identifier 'e'{{$}}}}
+ auto Functor = [x]() {};
+ long Alignment = __alignof__(Functor);
+ }
+}
+}
More information about the cfe-commits
mailing list