diff options
author | Andrew Niefer | 2004-11-18 21:05:26 +0000 |
---|---|---|
committer | Andrew Niefer | 2004-11-18 21:05:26 +0000 |
commit | 235b6312f0ec4fa76ae43dbb397daa402c9771a9 (patch) | |
tree | 8bb4fe7fab2b273eddd878ed19365e90c4bb346c | |
parent | 9293cb16fbe9e3fd7eaf7b53e979189f7d957af3 (diff) | |
download | org.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
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; } |