r196352 - Fix error recovery in return statement.
Serge Pavlov
sepavloff at gmail.com
Tue Dec 3 19:51:59 PST 2013
Author: sepavloff
Date: Tue Dec 3 21:51:59 2013
New Revision: 196352
URL: http://llvm.org/viewvc/llvm-project?rev=196352&view=rev
Log:
Fix error recovery in return statement.
This patch fixes PR16989.
Modified:
cfe/trunk/lib/Parse/ParseStmt.cpp
cfe/trunk/test/SemaCXX/crashes.cpp
Modified: cfe/trunk/lib/Parse/ParseStmt.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseStmt.cpp?rev=196352&r1=196351&r2=196352&view=diff
==============================================================================
--- cfe/trunk/lib/Parse/ParseStmt.cpp (original)
+++ cfe/trunk/lib/Parse/ParseStmt.cpp Tue Dec 3 21:51:59 2013
@@ -1730,8 +1730,8 @@ StmtResult Parser::ParseReturnStatement(
<< R.get()->getSourceRange();
} else
R = ParseExpression();
- if (R.isInvalid()) { // Skip to the semicolon, but don't consume it.
- SkipUntil(tok::semi, StopBeforeMatch);
+ if (R.isInvalid()) {
+ SkipUntil(tok::r_brace, StopAtSemi | StopBeforeMatch);
return StmtError();
}
}
Modified: cfe/trunk/test/SemaCXX/crashes.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/crashes.cpp?rev=196352&r1=196351&r2=196352&view=diff
==============================================================================
--- cfe/trunk/test/SemaCXX/crashes.cpp (original)
+++ cfe/trunk/test/SemaCXX/crashes.cpp Tue Dec 3 21:51:59 2013
@@ -218,3 +218,16 @@ namespace pr12791 {
template class basic_stringbuf<char>;
}
+namespace pr16989 {
+ class C {
+ template <class T>
+ C tpl_mem(T *) { return } // expected-error{{expected expression}}
+ void mem(int *p) {
+ tpl_mem(p);
+ }
+ };
+ class C2 {
+ void f();
+ };
+ void C2::f() {}
+}
More information about the cfe-commits
mailing list