diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java index 0160043c732..783e33529d9 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java @@ -6559,4 +6559,22 @@ public class AST2CPPTests extends AST2BaseTest { assertTrue(bar_c_ft.isConst()); assertTrue(!bar_c_ft.isVolatile()); assertTrue(!bar_ft.isConst()); assertTrue(!bar_ft.isVolatile()); } + + + // void test1(float f); + // void test1(void); + // void blabla() { + // test1(1); + // } + // enum E {e1}; + // class C {}; + // void test2(float f); + // void test2(C c); + // void blabla2() { + // test2(e1); + // } + public void testOverloadResolution_262191() throws Exception { + final String code= getAboveComment(); + parseAndCheckBindings(code); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java index 36f2ce662b4..17234747ee5 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPSemantics.java @@ -1899,7 +1899,7 @@ public class CPPSemantics { final IParameter[] params = function.getParameters(); int numPars = params.length; - if (numArgs == 0 && numPars == 1) { + if (numArgs < 2 && numPars == 1) { // check for void IType t = SemanticUtil.getUltimateTypeViaTypedefs(params[0].getType()); if (t instanceof IBasicType && ((IBasicType)t).getType() == IBasicType.t_void) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/Conversions.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/Conversions.java index 0cbb3183570..783c0276ba8 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/Conversions.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/Conversions.java @@ -778,7 +778,7 @@ public class Conversions { } } - if (t instanceof IBasicType && s instanceof IBasicType || s instanceof IEnumeration) { + if (t instanceof IBasicType && (s instanceof IBasicType || s instanceof IEnumeration)) { // 4.7 An rvalue of an integer type can be converted to an rvalue of another integer type. // An rvalue of an enumeration type can be converted to an rvalue of an integer type. cost.rank = Cost.CONVERSION_RANK;