From 862cf70fa32f7e2e092283076c30024cba644bc3 Mon Sep 17 00:00:00 2001 From: Nathan Ridge Date: Mon, 17 Jul 2017 19:48:20 -0400 Subject: [PATCH] Bug 519790 - ClassCastException in CPPVisitor.createAutoParameterType() Change-Id: If200ee08b61b94af2d559505498b4dbc585c3d6e --- .../core/dom/parser/cpp/semantics/CPPVisitor.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java index 6f13aa060cb..2ed292cd169 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java @@ -2178,8 +2178,15 @@ public class CPPVisitor extends ASTQueries { placeholderKind); } if (declarator.getParent() instanceof ICPPASTParameterDeclaration) { - return createAutoParameterType(declSpec, declarator, - (ICPPASTParameterDeclaration) declarator.getParent(), placeholderKind); + if (declarator.getParent().getParent() instanceof ICPPASTFunctionDeclarator) { + // 'auto' used as the type of a function parameter. + return createAutoParameterType(declSpec, declarator, + (ICPPASTParameterDeclaration) declarator.getParent(), placeholderKind); + } else { + // 'auto' used as the type of a template parameter. + // This is a C++17 feature we don't yet support. + return ProblemType.CANNOT_DEDUCE_AUTO_TYPE; + } } ICPPASTInitializerClause autoInitClause= null; IASTNode parent = declarator.getParent().getParent();