Author: nicholas
Date: Tue Dec 16 16:02:06 2014
New Revision: 224380
URL: http://llvm.org/viewvc/llvm-project?rev=224380&view=rev
Log:
Look at whether TransformTypos returned a different Expr instead of looking at
the number of uncorrected typos before and after. Correcting one typo may
produce an expression with another TypoExpr in it, leading to matching counts
even though a typo was corrected.
Fixes PR21925!
Modified:
cfe/trunk/lib/Sema/SemaExprCXX.cpp
cfe/trunk/test/SemaCXX/typo-correction-delayed.cpp
Modified: cfe/trunk/lib/Sema/SemaExprCXX.cpp
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprCXX.cpp?rev=224380&r1=224379&r2=224380&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaExprCXX.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExprCXX.cpp Tue Dec 16 16:02:06 2014
@@ -6208,10 +6208,11 @@ ExprResult Sema::CorrectDelayedTyposInEx
auto TyposResolved = DelayedTypos.size();
auto Result = TransformTypos(*this, Filter).Transform(E);
TyposResolved -= DelayedTypos.size();
- if (TyposResolved) {
+ if (Result.isInvalid() || Result.get() != E) {
ExprEvalContexts.back().NumTypos -= TyposResolved;
return Result;
}
+ assert(TyposResolved == 0 && "Corrected typo but got same Expr back?");
}
return E;
}
Modified: cfe/trunk/test/SemaCXX/typo-correction-delayed.cpp
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/typo-correction-delayed.cpp?rev=224380&r1=224379&r2=224380&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/typo-correction-delayed.cpp (original)
+++ cfe/trunk/test/SemaCXX/typo-correction-delayed.cpp Tue Dec 16 16:02:06 2014
@@ -130,3 +130,16 @@ void UseOverload() {
// expected-error@+1 {{use of undeclared identifier 'resulta'; did you mean
'result'?}}
Overload(resulta);
}
+
+namespace PR21925 {
+struct X {
+ int get() { return 7; } // expected-note {{'get' declared here}}
+};
+void test() {
+ X variable; // expected-note {{'variable' declared here}}
+
+ // expected-error@+2 {{use of undeclared identifier 'variableX'; did you
mean 'variable'?}}
+ // expected-error@+1 {{no member named 'getX' in 'PR21925::X'; did you mean
'get'?}}
+ int x = variableX.getX();
+}
+}
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits