diff --git a/core/org.eclipse.cdt.core.tests/failures/org/eclipse/cdt/core/parser/failedTests/FailedCompleteParseASTTest.java b/core/org.eclipse.cdt.core.tests/failures/org/eclipse/cdt/core/parser/failedTests/FailedCompleteParseASTTest.java index fc2dde925ff..59ab76c0656 100644 --- a/core/org.eclipse.cdt.core.tests/failures/org/eclipse/cdt/core/parser/failedTests/FailedCompleteParseASTTest.java +++ b/core/org.eclipse.cdt.core.tests/failures/org/eclipse/cdt/core/parser/failedTests/FailedCompleteParseASTTest.java @@ -204,25 +204,6 @@ public class FailedCompleteParseASTTest extends CompleteParseBaseTest // assertFalse(j.hasNext()); } - public void testInheritsFromTemplateParameter_bug71410() throws Exception { - try { - // An inner type definition inherits from a template parameter - parse("template \n class A { \n struct B : U { T* mpT; }; \n B mB; \n T* foo() { return mB.mpT; } \n }; \n");//$NON-NLS-1$ - fail(); - } catch (ParserException e) { - assertTrue( e.getMessage().equals( "FAILURE" ) ); //$NON-NLS-1$ - } -// Iterator i = parse("template \n class A { \n struct B : U { T* mT; }; \n B mB; \n T* getVal() { return mB.mT; } \n }; \n").getDeclarations();//$NON-NLS-1$ -// IASTTemplateDeclaration td = (IASTTemplateDeclaration)i.next(); -// assertFalse(i.hasNext()); -// IASTClassSpecifier cs = (IASTClassSpecifier) td.getOwnedDeclaration(); -// Iterator j = cs.getDeclarations(); -// IASTClassSpecifier cs2 = (IASTClassSpecifier) j.next(); -// IASTField f = (IASTField) j.next(); -// IASTMethod m = (IASTMethod) j.next(); -// assertFalse(j.hasNext()); - } - public void testParametrizedTypeDefinition_bug69751() throws Exception { try { // a typedef refers to an unknown type in a template parameter diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTemplateTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTemplateTest.java index 0569a844195..b366ab4acd7 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTemplateTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTemplateTest.java @@ -1044,4 +1044,17 @@ public class CompleteParseASTTemplateTest extends CompleteParseBaseTest { assertEquals( clause.getParentClassSpecifier(), B1cls ); } + + public void testInheritsFromTemplateParameter_bug71410() throws Exception { + // An inner type definition inherits from a template parameter + Iterator i = parse("template \n class A { \n struct B : U { T* mT; }; \n B mB; \n T* getVal() { return mB.mT; } \n }; \n").getDeclarations();//$NON-NLS-1$ + IASTTemplateDeclaration td = (IASTTemplateDeclaration)i.next(); + assertFalse(i.hasNext()); + IASTClassSpecifier cs = (IASTClassSpecifier) td.getOwnedDeclaration(); + Iterator j = cs.getDeclarations(); + IASTClassSpecifier cs2 = (IASTClassSpecifier) j.next(); + IASTField f = (IASTField) j.next(); + IASTMethod m = (IASTMethod) j.next(); + assertFalse(j.hasNext()); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java index db74abf6b1b..196b40410c2 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java @@ -651,7 +651,9 @@ public class ParserSymbolTable { { wrapper = (IDerivableContainerSymbol.IParentSymbol) scopes.get(i); ISymbol parent = wrapper.getParent(); - if( parent == null ) + + //skip if parent is template parameter + if( parent == null || parent.isType( ITypeInfo.t_templateParameter ) ) continue; if( !wrapper.isVirtual() || !data.visited.containsKey( parent ) ){