From 3c09a628a2c903f015ab90461966826b88ad1a36 Mon Sep 17 00:00:00 2001 From: Sergey Prigogin Date: Thu, 14 Apr 2016 20:28:13 -0700 Subject: [PATCH] Bug 491748 - Name resolution problem with initializer list Change-Id: Ib259f16a080c7f8848a7ce9e1c40c0153e99f387 --- .../cdt/core/parser/tests/ast2/AST2CPPTests.java | 9 +++++++++ .../core/dom/parser/ArithmeticConversion.java | 13 +++++++++++++ 2 files changed, 22 insertions(+) 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 1be4d449c87..858e8723c9f 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 @@ -10834,6 +10834,15 @@ public class AST2CPPTests extends AST2TestBase { helper.assertNonProblemOnFirstIdentifier("fint({vchar"); } + // void waldo(char x); + // + // void test() { + // waldo({1}); + // } + public void testNarrowingConversionInListInitialization_491748() throws Exception { + parseAndCheckBindings(); + } + // namespace std { // struct string {}; // struct exception {}; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ArithmeticConversion.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ArithmeticConversion.java index 9bfb114898a..45f9ec70162 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ArithmeticConversion.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ArithmeticConversion.java @@ -364,6 +364,19 @@ public abstract class ArithmeticConversion { } return n < (Integer.MAX_VALUE + 1L) * 2; + case eChar: + return 0 <= n && n <= 0xFF; + + case eChar16: + case eWChar: + return 0 <= n && n <= 0xFFFF; + + case eChar32: + return 0 <= n && n <= 0xFFFFFFFFL; + + case eDecimal32: + return Integer.MIN_VALUE <= n && n <= Integer.MAX_VALUE; + case eFloat: float f= n; return (long) f == n;