From 39dce1d497a2508f5bb48c6839bab80127fe52ac Mon Sep 17 00:00:00 2001 From: Nathan Ridge Date: Fri, 28 Nov 2014 02:26:39 -0500 Subject: [PATCH] Bug 451091 - Make type of constexpr variable const-qualified Change-Id: I432264fe733e27009dfc9cfbaa37631424af7d0c Signed-off-by: Nathan Ridge Reviewed-on: https://git.eclipse.org/r/37224 Reviewed-by: Sergey Prigogin Tested-by: Sergey Prigogin --- .../eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java | 8 ++++++++ .../core/dom/parser/cpp/semantics/CPPVisitor.java | 5 ++++- 2 files changed, 12 insertions(+), 1 deletion(-) 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) {