diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java index 4e05e2cf07c..795f2f8a32d 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java @@ -10978,4 +10978,12 @@ public class AST2CPPTests extends AST2TestBase { IASTSimpleDeclaration sd = (IASTSimpleDeclaration) tu.getDeclarations()[0]; isParameterSignatureEqual(sd.getDeclarators()[0], "(int&&)"); } + + // constexpr int waldo = 42; + public void testConstexprVariableIsConst_451091() throws Exception { + BindingAssertionHelper helper = getAssertionHelper(); + ICPPVariable waldo = helper.assertNonProblem("waldo"); + assertInstance(waldo.getType(), IQualifierType.class); + assertTrue(((IQualifierType) waldo.getType()).isConst()); + } } 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 4c88bfcb1fd..35ac854f633 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 @@ -2243,7 +2243,10 @@ public class CPPVisitor extends ASTQueries { } private static IType qualifyType(IType type, IASTDeclSpecifier declSpec) { - return SemanticUtil.addQualifiers(type, declSpec.isConst(), declSpec.isVolatile(), declSpec.isRestrict()); + boolean isConst = declSpec.isConst() + || (declSpec instanceof ICPPASTDeclSpecifier + && ((ICPPASTDeclSpecifier) declSpec).isConstexpr()); + return SemanticUtil.addQualifiers(type, isConst, declSpec.isVolatile(), declSpec.isRestrict()); } private static IType createType(IType baseType, IASTDeclarator declarator) {