From 6190dce23278d3599f668d52120c6a3281f6d511 Mon Sep 17 00:00:00 2001 From: Nathan Ridge Date: Sat, 9 Mar 2013 03:21:41 -0500 Subject: [PATCH] Bug 402409 - Dependent expressions and auto type resolution Change-Id: Ic391705ea80adf28a4d664198c79817d54e9bddd Reviewed-on: https://git.eclipse.org/r/11014 Reviewed-by: Sergey Prigogin IP-Clean: Sergey Prigogin Tested-by: Sergey Prigogin --- .../cdt/core/parser/tests/ast2/AST2TemplateTests.java | 8 ++++++-- .../internal/core/dom/parser/cpp/semantics/EvalID.java | 5 +++-- 2 files changed, 9 insertions(+), 4 deletions(-) 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 99e5d589507..7ec52522513 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 @@ -5904,11 +5904,15 @@ public class AST2TemplateTests extends AST2TestBase { // }; // // template - // auto begin(Container cont) -> decltype(cont.begin()); + // auto begin1(Container cont) -> decltype(cont.begin()); + // + // template + // auto begin2(Container& cont) -> decltype(cont.begin()); // // int main() { // vector v; - // begin(v); + // begin1(v); + // begin2(v); // } public void testResolvingAutoTypeWithDependentExpression_402409b() throws Exception { parseAndCheckBindings(); 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 0f1fa436813..1a9b23ef992 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 @@ -329,9 +329,10 @@ public class EvalID extends CPPDependentEvaluation { if (fieldOwner != null && !fieldOwner.isTypeDependent()) { IType fieldOwnerType = fieldOwner.getTypeOrFunctionSet(point); - IType fieldOwnerClassType = SemanticUtil.getNestedType(fieldOwnerType, TDEF | REF | CVTYPE); + IType fieldOwnerClassTypeCV = SemanticUtil.getNestedType(fieldOwnerType, TDEF | REF); + IType fieldOwnerClassType = SemanticUtil.getNestedType(fieldOwnerClassTypeCV, CVTYPE); if (fieldOwnerClassType instanceof ICPPClassType) { - ICPPEvaluation eval = resolveName((ICPPClassType) fieldOwnerClassType, templateArgs, fieldOwnerType, point); + ICPPEvaluation eval = resolveName((ICPPClassType) fieldOwnerClassType, templateArgs, fieldOwnerClassTypeCV, point); if (eval != null) return eval; }