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 69d800d7193..458a9e4728f 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 @@ -5871,8 +5871,8 @@ public class AST2Tests extends AST2BaseTest { long mem= memoryUsed(); IASTTranslationUnit tu= parse(code, lang, false, true, true); long diff= memoryUsed()-mem; - // allow a copy of the buffer + not even 1 byte per initializer - final int expected = code.length()*2 + AMOUNT-1; + // allow a copy of the buffer + less than 2 bytes per initializer + final int expected = code.length()*2 + AMOUNT + AMOUNT/2; assertTrue(String.valueOf(diff) + " expected < " + expected, diff < expected); assertTrue(tu.isFrozen()); } @@ -7252,4 +7252,23 @@ public class AST2Tests extends AST2BaseTest { assertInstance(var, IVariable.class); assertTrue(var.getScope().getKind() == EScopeKind.eLocal); } + + // void foo(int i); + // void foo(int j) { } + public void testParameterBindings_316931() throws Exception { + String code= getAboveComment(); + parseAndCheckBindings(code); + for (int k=0; k<2; k++) { + BindingAssertionHelper bh= new BindingAssertionHelper(code, k>0); + IParameter i= bh.assertNonProblem("i)", 1); + IParameter j= bh.assertNonProblem("j)", 1); + assertSame(i, j); + + IASTTranslationUnit tu= bh.getTranslationUnit(); + IASTName[] decls = tu.getDeclarationsInAST(i); + assertEquals(2, decls.length); + decls = tu.getDeclarationsInAST(j); + assertEquals(2, decls.length); + } + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java index c5c2bb4a552..c3a7e82aff1 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java @@ -1342,7 +1342,10 @@ public class CPPVisitor extends ASTQueries { kind = KIND_TYPE; } else if (binding instanceof ICPPNamespace) { kind = KIND_NAMESPACE; - } else { + } else if (binding instanceof IParameter) { + requiredName= null; + kind = KIND_OBJ_FN; + } else { kind = KIND_OBJ_FN; } }