From a93b94b8226e9bcd6f759a265e8d01798b228984 Mon Sep 17 00:00:00 2001 From: Nathan Ridge Date: Wed, 30 Nov 2016 01:54:31 -0500 Subject: [PATCH] Bug 508254 - Instantiation of id-expression naming static field Change-Id: I97732a3f1ceba560e762e5f61c68a052ebceb7b5 --- .../parser/tests/ast2/AST2TemplateTests.java | 23 +++++++++++++++++++ .../core/dom/parser/cpp/semantics/EvalID.java | 4 ++++ 2 files changed, 27 insertions(+) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java index ec79cbc1907..9db40a9fe13 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java @@ -3457,6 +3457,29 @@ public class AST2TemplateTests extends AST2TestBase { BindingAssertionHelper ba= new BindingAssertionHelper(getAboveComment(), CPP); ICPPTemplateTypeParameter t= ba.assertNonProblem("T)", 1, ICPPTemplateTypeParameter.class); } + + // template + // constexpr T id(T a) { + // return a; + // } + // + // template + // struct ratio { + // static const int num = N; + // }; + // + // template + // struct ratioRoundUp : ratio {}; + // + // typedef ratioRoundUp> rounded; + // + // template struct Waldo; + // template <> struct Waldo<42> { typedef int type; }; + // + // Waldo::type foo(); // ERROR + public void testDependentIdExprNamingStaticMember_508254() throws Exception { + parseAndCheckBindings(); + } // template // struct integral_constant { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalID.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalID.java index 2f43c67ed14..9827261bbe2 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalID.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalID.java @@ -439,6 +439,10 @@ public class EvalID extends CPPDependentEvaluation { return new EvalBinding(binding, null, getTemplateDefinition()); } if (binding instanceof ICPPMember) { + if (((ICPPMember) binding).isStatic()) { + // Don't use EvalMemberAccess to represent accesses of static members. + return new EvalBinding(binding, null, getTemplateDefinition()); + } if (ownerEval != null) { return new EvalMemberAccess(nameOwner, ownerEval.getValueCategory(point), binding, ownerEval, false, point); } else {