Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Niefer2004-11-18 21:05:26 +0000
committerAndrew Niefer2004-11-18 21:05:26 +0000
commit235b6312f0ec4fa76ae43dbb397daa402c9771a9 (patch)
tree8bb4fe7fab2b273eddd878ed19365e90c4bb346c
parent9293cb16fbe9e3fd7eaf7b53e979189f7d957af3 (diff)
downloadorg.eclipse.cdt-235b6312f0ec4fa76ae43dbb397daa402c9771a9.tar.gz
org.eclipse.cdt-235b6312f0ec4fa76ae43dbb397daa402c9771a9.tar.xz
org.eclipse.cdt-235b6312f0ec4fa76ae43dbb397daa402c9771a9.zip
patch from Devin Steffler : fix for 71317 invalid overload of the name
-rw-r--r--core/org.eclipse.cdt.core.tests/failures/org/eclipse/cdt/core/parser/failedTests/FailedCompleteParseASTTest.java21
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/CompleteParseASTTest.java29
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java10
3 files changed, 39 insertions, 21 deletions
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 c64fd5e90fc..3df30db1ea1 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
@@ -139,25 +139,4 @@ public class FailedCompleteParseASTTest extends CompleteParseBaseTest
// assertFalse( i.hasNext() );
// assertAllReferences( 4 /*should be 5 */, createTaskList( new Task( cl /* , 2 */ ), new Task( a), new Task( pm), new Task( f2)));
}
-
-
- public void testUsingOverloadedName_bug71317() throws Exception {
- // using a globaly defined function overloaded in a namespace
- try {
- parse("int foo(int); \n namespace NS { \n int foo(int); \n using ::foo; \n } \n");//$NON-NLS-1$
- fail();
- } catch ( ParserException e ){
- assertTrue( e.getMessage().equals( "FAILURE" ) ); //$NON-NLS-1$
- }
-// Iterator i = parse("int foo(); \n namespace NS { int bar(); \n using ::foo; \n } \n").getDeclarations();//$NON-NLS-1$
-// IASTFunction fd1 = (IASTFunction) i.next();
-// IASTNamespaceDefinition nd = (IASTNamespaceDefinition) i.next();
-// assertFalse(i.hasNext());
-// Iterator j = nd.getDeclarations();
-// IASTFunction fd2 = (IASTFunction) j.next();
-// IASTUsingDeclaration ud = (IASTUsingDeclaration) j.next();
-// assertFalse(j.hasNext());
- }
-
-
}
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 f05c666d40f..60173f7d583 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
@@ -2386,6 +2386,35 @@ public class CompleteParseASTTest extends CompleteParseBaseTest
assertFalse( i.hasNext() );
}
}
+ public void testBug71317A() throws Exception {
+ Writer writer = new StringWriter();
+ writer.write("void f();\n"); //$NON-NLS-1$
+ writer.write("namespace NS {\n"); //$NON-NLS-1$
+ writer.write("using ::f;\n"); //$NON-NLS-1$
+ writer.write("using ::f;\n}"); //$NON-NLS-1$
+ parse(writer.toString());
+ }
+ public void testBug71317B() throws Exception {
+ Writer writer = new StringWriter();
+ writer.write("void f();\n"); //$NON-NLS-1$
+ writer.write("namespace NS {\n"); //$NON-NLS-1$
+ writer.write("void f();\n"); //$NON-NLS-1$
+ writer.write("using ::f;\n}"); //$NON-NLS-1$
+
+ try{
+ parse(writer.toString());
+ assertTrue(false);
+ } catch (ParserException pe) {
+ // expected IProblem
+ } finally {
+ Iterator probs = callback.getProblems();
+ assertTrue( probs.hasNext() );
+ Object ipo = probs.next();
+ assertTrue( ipo instanceof IProblem );
+ IProblem ip = (IProblem)ipo;
+ assertEquals(ip.getSourceLineNumber(), 4);
+ }
+ }
}
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 6dae20a6e3f..552c1d85511 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
@@ -939,6 +939,16 @@ public class ParserSymbolTable {
return true;
}
+ // fix 71317, see C++ spec 7.3.3-11, two using declarations may introduce functions with the same
+ //name and parameter types
+ if (newSymbol.isForwardDeclaration() && newSymbol.getForwardSymbol() != null
+ && newSymbol.getContainingSymbol() == origSymbol.getContainingSymbol()
+ && newSymbol.getForwardSymbol().getContainingSymbol() != newSymbol.getContainingSymbol()
+ && origSymbol.isForwardDeclaration() && origSymbol.getForwardSymbol() != null
+ && origSymbol.getForwardSymbol().getContainingSymbol() != origSymbol.getContainingSymbol()) {
+ return true;
+ }
+
return false;
}

Back to the top