From f9c0ac30d7030316578b47e3edbe769765edc52e Mon Sep 17 00:00:00 2001 From: Sergey Prigogin Date: Fri, 2 Jan 2009 20:53:45 +0000 Subject: [PATCH] Bug 259871. Fix and test case. --- .../parser/tests/ast2/AST2TemplateTests.java | 20 +++++++++++++++++++ .../dom/parser/cpp/semantics/Conversions.java | 2 ++ 2 files changed, 22 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 1aa009f8575..2e4a1908d98 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 @@ -3532,4 +3532,24 @@ public class AST2TemplateTests extends AST2BaseTest { b= bh.assertNonProblem("F();", 1); assertTrue(b instanceof IType); } + + // template + // struct A { + // typedef const Val value; + // }; + // + // template + // struct B { + // typedef typename T::value& reference; + // }; + // + // void func(int a); + // + // void test(B >::reference p) { + // func(p); + // } + public void testTypedefReference_259871() throws Exception { + BindingAssertionHelper bh= new BindingAssertionHelper(getAboveComment(), true); + bh.assertNonProblem("func(p)", 4, ICPPFunction.class); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/Conversions.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/Conversions.java index f3d0045faf3..ab5071433a4 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/Conversions.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/Conversions.java @@ -512,6 +512,8 @@ public class Conversions { if (source instanceof ICPPReferenceType) { source= ((ICPPReferenceType) source).getType(); + while (source instanceof ITypedef) + source = ((ITypedef) source).getType(); } if (target instanceof ICPPReferenceType) { target= ((ICPPReferenceType) target).getType();