Parse: Don't crash on trailing whitespace before EOF
Parser::ParseDeclarationSpecifiers eagerly updates the source range of the DeclSpec with the current token position. However, it might not consume any more tokens. Fix this by only setting the start of the range, not the end. This way the SourceRange will be invalid if we don't consume any more tokens. This fixes PR20413. Differential Revision: http://reviews.llvm.org/D4646 llvm-svn: 214018
This commit is contained in:
parent
1f30f5aef7
commit
24b283005d
|
@ -2449,8 +2449,11 @@ void Parser::ParseDeclarationSpecifiers(DeclSpec &DS,
|
||||||
DeclSpecContext DSContext,
|
DeclSpecContext DSContext,
|
||||||
LateParsedAttrList *LateAttrs) {
|
LateParsedAttrList *LateAttrs) {
|
||||||
if (DS.getSourceRange().isInvalid()) {
|
if (DS.getSourceRange().isInvalid()) {
|
||||||
|
// Start the range at the current token but make the end of the range
|
||||||
|
// invalid. This will make the entire range invalid unless we successfully
|
||||||
|
// consume a token.
|
||||||
DS.SetRangeStart(Tok.getLocation());
|
DS.SetRangeStart(Tok.getLocation());
|
||||||
DS.SetRangeEnd(Tok.getLocation());
|
DS.SetRangeEnd(SourceLocation());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EnteringContext = (DSContext == DSC_class || DSContext == DSC_top_level);
|
bool EnteringContext = (DSContext == DSC_class || DSContext == DSC_top_level);
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
// RUN: not %clang_cc1 %s -fsyntax-only 2>&1 | FileCheck %s
|
||||||
|
|
||||||
|
// CHECK: error: expected expression
|
||||||
|
// CHECK: error: expected member name or ';' after declaration specifiers
|
||||||
|
// CHECK: error: expected '}'
|
||||||
|
// CHECK: note: to match this '{'
|
||||||
|
// CHECK: error: expected ';' after class
|
||||||
|
// CHECK: 4 errors generated.
|
||||||
|
|
||||||
|
// Do not add anything to the end of this file. This requires the whitespace
|
||||||
|
// plus EOF after the '<' token.
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
class a {
|
||||||
|
a<
|
Loading…
Reference in New Issue