From ea73ee769bf31f0db4f05744c4b9b39b84e6e528 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Fri, 23 Jan 2009 16:05:37 +0000 Subject: [PATCH] Fixes some conversions, bug 262191. --- .../core/parser/tests/ast2/AST2CPPTests.java | 18 ++++++++++++++++++ .../dom/parser/cpp/semantics/CPPSemantics.java | 2 +- .../dom/parser/cpp/semantics/Conversions.java | 2 +- 3 files changed, 20 insertions(+), 2 deletions(-) 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;