Parse: Don't crash if missing an initializer expression
authorDavid Majnemer <david.majnemer@gmail.com>
Tue, 13 Jan 2015 05:28:24 +0000 (05:28 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Tue, 13 Jan 2015 05:28:24 +0000 (05:28 +0000)
llvm-svn: 225768

clang/lib/Parse/ParseDecl.cpp
clang/test/Parser/cxx-default-args.cpp

index 0d8b0cc..93125e9 100644 (file)
@@ -5625,13 +5625,14 @@ void Parser::ParseParameterDeclarationClause(
           // FIXME: Can we use a smart pointer for Toks?
           DefArgToks = new CachedTokens;
 
+          SourceLocation ArgStartLoc = NextToken().getLocation();
           if (!ConsumeAndStoreInitializer(*DefArgToks, CIK_DefaultArgument)) {
             delete DefArgToks;
             DefArgToks = nullptr;
             Actions.ActOnParamDefaultArgumentError(Param, EqualLoc);
           } else {
             Actions.ActOnParamUnparsedDefaultArgument(Param, EqualLoc,
-                                                (*DefArgToks)[1].getLocation());
+                                                      ArgStartLoc);
           }
         } else {
           // Consume the '='.
index f0e2e69..0c028f7 100644 (file)
@@ -36,3 +36,7 @@ struct T {
 struct S { 
   void f(int &r = error);  // expected-error {{use of undeclared identifier 'error'}}
 };
+
+struct U {
+  void i(int x = ) {} // expected-error{{expected expression}}
+};