diff --git a/src/libs/3rdparty/cplusplus/Parser.cpp b/src/libs/3rdparty/cplusplus/Parser.cpp
index 77d7a5e20068ab751482b7ee7944abc725c474a1..95fd7147983f1cd463d561df19f9ec6bec0a3afe 100644
--- a/src/libs/3rdparty/cplusplus/Parser.cpp
+++ b/src/libs/3rdparty/cplusplus/Parser.cpp
@@ -3638,11 +3638,9 @@ bool Parser::parseBuiltinTypeSpecifier(SpecifierListAST *&node)
         DecltypeSpecifierAST *ast = new (_pool) DecltypeSpecifierAST;
         ast->decltype_token = consumeToken();
         match(T_LPAREN, &ast->lparen_token);
-        if (parseExpression(ast->expression)) {
+        if (parseExpression(ast->expression))
             match(T_RPAREN, &ast->rparen_token);
-            node = new (_pool) SpecifierListAST(ast);
-            return true;
-        }
+        node = new (_pool) SpecifierListAST(ast);
         skipUntilDeclaration();
         return true;
     } else if (lookAtBuiltinTypeSpecifier()) {
diff --git a/tests/auto/cplusplus/ast/tst_ast.cpp b/tests/auto/cplusplus/ast/tst_ast.cpp
index 13f90d2a292f79f1e8dad7772139f08150df8799..6f5e349f70621f636aa47709ff46a9d5c39392a1 100644
--- a/tests/auto/cplusplus/ast/tst_ast.cpp
+++ b/tests/auto/cplusplus/ast/tst_ast.cpp
@@ -101,6 +101,7 @@ private slots:
     void gcc_attributes_1();
     void gcc_attributes_2();
     void gcc_attributes_3();
+    void crash_test_1();
 
     // expressions
     void simple_name_1();
@@ -212,6 +213,13 @@ void tst_AST::gcc_attributes_3()
     QCOMPARE(unit->tokenKind(link->rbrace_token), (int) T_RBRACE);
 }
 
+void tst_AST::crash_test_1()
+{
+    QSharedPointer<TranslationUnit> unit(parseStatement("decltype auto\n"));
+    AST *ast = unit->ast();
+    QVERIFY(ast);
+}
+
 void tst_AST::simple_declaration_1()
 {
     QSharedPointer<TranslationUnit> unit(parseStatement("\n"