diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java index 5c9083f0fd5..13f99a16903 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java @@ -2263,5 +2263,17 @@ public class CompleteParseASTTest extends CompleteParseBaseTest assertTrue(ip.getArguments().indexOf("This was equal, but not for the eclipse") > 0); } } + + public void testBug74847() throws Exception { + String code = "class A : public FOO {};"; + Iterator i = parse( code, false ).getDeclarations(); + IASTClassSpecifier A = (IASTClassSpecifier) ((IASTAbstractTypeSpecifierDeclaration)i.next()).getTypeSpecifier(); + assertFalse( A.getBaseClauses().hasNext() ); + i = callback.getProblems(); + IProblem problem = (IProblem) i.next(); + assertEquals( problem.getID(), IProblem.SEMANTIC_NAME_NOT_FOUND ); + assertEquals( problem.getSourceStart(), code.indexOf( "FOO" ) ); + assertFalse( i.hasNext() ); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java index 2640508ee2e..9434fcd9fc0 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/ast/complete/CompleteParseASTFactory.java @@ -915,8 +915,9 @@ public class CompleteParseASTFactory extends BaseASTFactory implements IASTFacto //Its possible that the parent is not an IContainerSymbol if its a template parameter or some kinds of template instances ISymbol symbol = lookupQualifiedName( classSymbol, parentClassName, references, true ); - if( symbol instanceof ITemplateSymbol && - ! ( symbol instanceof UndefinedTemplateSymbol ) ) + if( symbol == null ) + handleProblem( IProblem.SEMANTIC_NAME_NOT_FOUND, parentClassName.toCharArray(), parentClassName.getStartOffset(), parentClassName.getEndOffset(), parentClassName.getLineNumber(), true ); + if( symbol instanceof ITemplateSymbol && ! ( symbol instanceof UndefinedTemplateSymbol ) ) handleProblem( IProblem.SEMANTIC_INVALID_TEMPLATE_ARGUMENT, parentClassName.toCharArray(), parentClassName.getStartOffset(), parentClassName.getEndOffset(), parentClassName.getLineNumber(), true); List [] templateArgumentLists = parentClassName.getTemplateIdArgLists();