diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2BaseTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2BaseTest.java index ce38017997a..4d0462f77d1 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2BaseTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2BaseTest.java @@ -394,7 +394,7 @@ public class AST2BaseTest extends BaseTestCase { } protected static void assertInstance(Object o, Class c) { - assertNotNull(o); + assertNotNull("Expected object of "+c.getName()+" but got a null value", o); assertTrue("Expected "+c.getName()+" but got "+o.getClass().getName(), c.isInstance(o)); } } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CSpecTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CSpecTest.java index 7a7c17ac419..b25f92a5601 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CSpecTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CSpecTest.java @@ -1505,7 +1505,7 @@ public class AST2CSpecTest extends AST2SpecBaseTest { public void test6_7_8s34() throws Exception { StringBuffer buffer = new StringBuffer(); buffer.append("div_t answer = { .quot = 2, .rem = -1 };\n"); //$NON-NLS-1$ - parse(buffer.toString(), ParserLanguage.C, true, 0); + parse(buffer.toString(), ParserLanguage.C, true, 1); // div_t (correctly) cannot be resolved } /** diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java index 895878ae35e..eb2af9c503c 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java @@ -113,9 +113,9 @@ public class AST2Tests extends AST2BaseTest { super(name); } - public void testBug75189() throws Exception { - parseAndCheckBindings( "struct A{};typedef int (*F) (A*);" ); //$NON-NLS-1$ + parseAndCheckBindings( "struct A{};\n typedef int (*F) (struct A*);" ); //$NON-NLS-1$ + parseAndCheckBindings( "struct A{};\n typedef int (*F) (A*);", ParserLanguage.CPP ); //$NON-NLS-1$ } public void testBug75340() throws Exception { @@ -1873,7 +1873,7 @@ public class AST2Tests extends AST2BaseTest { assertEquals(decls.length, 1); assertEquals(decls[0], name_A1); - assertNull(name_d.resolveBinding()); + assertNull("Expected null, got "+name_d.resolveBinding(), name_d.resolveBinding()); } public void testDesignatedInitializers() throws ParserException { @@ -3835,4 +3835,36 @@ public class AST2Tests extends AST2BaseTest { buffer.append("string\";\n" ); //$NON-NLS-1$ parseAndCheckBindings( buffer.toString() ); } + + // typedef A B; + // typedef C D; + // typedef E E; + // typedef typeof(G) G; + // typedef H *H; + // typedef I *************I; + // typedef int (*J)(J); + public void testBug192165() throws Exception { + String content= getContents(1)[0].toString(); + for (int i = 0; i < LANGUAGES.length; i++) { + IASTTranslationUnit tu = parse( content, LANGUAGES[i], true, false ); + CNameCollector col = new CNameCollector(); + tu.accept(col); + assertInstance(col.getName(0).resolveBinding(), IProblemBinding.class); + assertInstance(col.getName(1).resolveBinding(), ITypedef.class); + assertInstance(col.getName(2).resolveBinding(), IProblemBinding.class); + assertInstance(col.getName(3).resolveBinding(), ITypedef.class); + assertInstance(col.getName(4).resolveBinding(), IProblemBinding.class); + assertInstance(col.getName(5).resolveBinding(), ITypedef.class); + assertInstance(col.getName(6).resolveBinding(), IProblemBinding.class); + assertInstance(col.getName(7).resolveBinding(), ITypedef.class); + assertInstance(col.getName(8).resolveBinding(), IProblemBinding.class); + assertInstance(col.getName(9).resolveBinding(), ITypedef.class); + assertInstance(col.getName(10).resolveBinding(), IProblemBinding.class); + assertInstance(col.getName(11).resolveBinding(), ITypedef.class); + + // function ptr + assertInstance(col.getName(12).resolveBinding(), ITypedef.class); + assertInstance(col.getName(13).resolveBinding(), IProblemBinding.class); + } + } } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/PDOMCBugsTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/PDOMCBugsTest.java index fa6dcddff51..1b1696c7bf3 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/PDOMCBugsTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/pdom/tests/PDOMCBugsTest.java @@ -10,15 +10,28 @@ *******************************************************************************/ package org.eclipse.cdt.internal.pdom.tests; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; +import java.util.regex.Pattern; + import junit.framework.Test; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.IPDOMManager; +import org.eclipse.cdt.core.dom.ast.IBinding; +import org.eclipse.cdt.core.dom.ast.IFunctionType; +import org.eclipse.cdt.core.dom.ast.IType; +import org.eclipse.cdt.core.dom.ast.ITypedef; +import org.eclipse.cdt.core.index.IndexFilter; import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.testplugin.CProjectHelper; import org.eclipse.cdt.core.testplugin.CTestPlugin; import org.eclipse.cdt.core.testplugin.util.BaseTestCase; import org.eclipse.cdt.core.testplugin.util.TestSourceReader; +import org.eclipse.cdt.internal.core.CCoreInternals; +import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPSemantics; +import org.eclipse.cdt.internal.core.pdom.PDOM; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.NullProgressMonitor; @@ -27,6 +40,7 @@ import org.osgi.framework.Bundle; public class PDOMCBugsTest extends BaseTestCase { ICProject cproject; + PDOM pdom; public static Test suite() { return suite(PDOMCBugsTest.class); @@ -41,6 +55,7 @@ public class PDOMCBugsTest extends BaseTestCase { CCorePlugin.getIndexManager().setIndexerId(cproject, IPDOMManager.ID_FAST_INDEXER); assertTrue(CCorePlugin.getIndexManager().joinIndexer(360000, new NullProgressMonitor())); + pdom= (PDOM) CCoreInternals.getPDOMManager().getPDOM(cproject); super.setUp(); } @@ -51,10 +66,37 @@ public class PDOMCBugsTest extends BaseTestCase { super.tearDown(); } - // typedef typeof(T) T; - public void _test192165() { - // a StackOverflow occurs at this point + // // check we get the right IProblemBinding objects + // typedef A B; + // typedef C D; + // typedef E E; + // typedef typeof(G) G; + // typedef H *H; + // typedef I *************I; + // typedef int (*J)(J); + public void test192165() throws Exception { + pdom.acquireReadLock(); + IBinding[] bindings= pdom.findBindings(Pattern.compile(".*"), false, IndexFilter.ALL, NPM); + assertEquals(7, bindings.length); + Set bnames= new HashSet(); + for(int i=0; i