From 96e51dfbca4e8ee006bae6b58fb4bb524b8f3206 Mon Sep 17 00:00:00 2001 From: Danny Ferreira Date: Fri, 17 May 2013 22:52:38 -0400 Subject: [PATCH] Bug 408314 - Failure of dependent base lookup Change-Id: Ib90cc5e562c459bdd15741655b35c599ad9ac297 Reviewed-on: https://git.eclipse.org/r/12959 Reviewed-by: Sergey Prigogin IP-Clean: Sergey Prigogin Tested-by: Sergey Prigogin --- .../parser/tests/ast2/AST2TemplateTests.java | 64 ++++++++++++++++++- .../tests/IndexCPPTemplateResolutionTest.java | 15 ++--- ...CPPClassTemplatePartialSpecialization.java | 22 +------ .../cpp/CPPClassTemplateSpecialization.java | 4 +- .../core/dom/parser/cpp/CPPUnknownMember.java | 5 ++ .../parser/cpp/semantics/CPPTemplates.java | 10 +-- .../composite/cpp/CPPCompositesFactory.java | 6 +- ...CPPClassTemplatePartialSpecialization.java | 27 +------- ...CPPClassTemplatePartialSpecialization.java | 30 +-------- ...tePartialSpecializationSpecialization.java | 2 +- .../PDOMCPPClassTemplateSpecialization.java | 3 +- .../core/pdom/dom/cpp/PDOMCPPLinkage.java | 27 +++++--- 12 files changed, 105 insertions(+), 110 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 8b7058858c0..4db597e20d2 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 @@ -13,6 +13,7 @@ * Sergey Prigogin (Google) * Thomas Corbat (IFS) * Nathan Ridge + * Danny Ferreira *******************************************************************************/ package org.eclipse.cdt.core.parser.tests.ast2; @@ -1968,7 +1969,8 @@ public class AST2TemplateTests extends AST2TestBase { ITypedef myType = (ITypedef) col.getName(31).resolveBinding(); ICPPClassType A = (ICPPClassType) myType.getType(); - ICPPSpecialization Aspec = (ICPPSpecialization) col.getName(10).resolveBinding(); + ICPPClassTemplatePartialSpecialization Aspec = + (ICPPClassTemplatePartialSpecialization) col.getName(10).resolveBinding(); assertTrue(A instanceof ICPPTemplateInstance); assertSame(((ICPPTemplateInstance)A).getTemplateDefinition(), Aspec); @@ -3224,7 +3226,67 @@ public class AST2TemplateTests extends AST2TestBase { BindingAssertionHelper ba= new BindingAssertionHelper(getAboveComment(), CPP); ba.assertNonProblem("foo(s", 3); } + + // template + // struct result : U { + // typedef typename result::result_type type; + // }; + // + // struct B { + // typedef int result_type; + // }; + // + // typedef result::type waldo; + public void testDependentBaseLookup_408314a() throws Exception { + BindingAssertionHelper bh = getAssertionHelper(); + ITypedef waldo = bh.assertNonProblem("waldo"); + assertSameType(waldo.getType(), CommonTypes.int_); + } + + // template + // struct A { + // template + // struct result; + // + // template + // struct result : T { + // typedef typename result::result_type type; + // }; + // }; + // + // struct B { + // typedef int result_type; + // }; + // + // typedef A::result::type waldo; + public void testDependentBaseLookup_408314b() throws Exception { + BindingAssertionHelper bh = getAssertionHelper(); + ITypedef waldo = bh.assertNonProblem("waldo"); + assertSameType(waldo.getType(), CommonTypes.int_); + } + // template + // struct A { + // template + // struct result; + // + // template + // struct result : T { + // typedef typename result::result_type type; + // }; + // }; + // + // struct B { + // typedef int result_type; + // }; + // + // typedef A::result::type waldo; + public void testDependentBaseLookup_408314c() throws Exception { + BindingAssertionHelper bh = getAssertionHelper(); + ITypedef waldo = bh.assertNonProblem("waldo"); + assertSameType(waldo.getType(), CommonTypes.int_); + } + // template // class A { // public: diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java index dd55f8fb57c..d07eab93b7a 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java @@ -599,17 +599,14 @@ public class IndexCPPTemplateResolutionTest extends IndexBindingResolutionTestBa IBinding b3= getBindingFromASTName("D