diff options
author | Jason Merrill <jason@redhat.com> | 2008-08-04 15:53:57 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2008-08-04 15:53:57 -0400 |
commit | a53b09faa5373286f38391ae90b379ecfce283f6 (patch) | |
tree | 02c27d8f0f6946c6d8018b380fa69f12c3010c78 | |
parent | 52fb73c2bf04c694a8ba5a78baa869dc2725ac53 (diff) | |
download | gcc-a53b09faa5373286f38391ae90b379ecfce283f6.zip gcc-a53b09faa5373286f38391ae90b379ecfce283f6.tar.gz gcc-a53b09faa5373286f38391ae90b379ecfce283f6.tar.bz2 |
re PR c++/36963 (Bogus narrowing conversion error in initializer list with -std=c++0x)
PR c++/36963
* typeck2.c (check_narrowing): Allow narrowing conversion
from an explicit floating-point constant.
From-SVN: r138652
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/typeck2.c | 13 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/initlist5.C | 4 |
3 files changed, 19 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 1918189..8ff23cd 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2008-08-04 Jason Merrill <jason@redhat.com> + PR c++/36963 + * typeck2.c (check_narrowing): Allow narrowing conversion + from an explicit floating-point constant. + PR c++/37006 * pt.c (tsubst_decl): Leave DECL_INITIAL set on deleted instantiations. diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c index ee686fe..787f439 100644 --- a/gcc/cp/typeck2.c +++ b/gcc/cp/typeck2.c @@ -640,9 +640,13 @@ check_narrowing (tree type, tree init) tree ftype = TREE_TYPE (init); bool ok = true; REAL_VALUE_TYPE d; + bool was_decl = false; if (DECL_P (init)) - init = decl_constant_value (init); + { + was_decl = true; + init = decl_constant_value (init); + } if (TREE_CODE (type) == INTEGER_TYPE && TREE_CODE (ftype) == REAL_TYPE) @@ -664,7 +668,12 @@ check_narrowing (tree type, tree init) if (TREE_CODE (init) == REAL_CST) { d = TREE_REAL_CST (init); - if (exact_real_truncate (TYPE_MODE (type), &d)) + if (exact_real_truncate (TYPE_MODE (type), &d) + /* FIXME: As a temporary workaround for PR 36963, don't + complain about narrowing from a floating + literal. Hopefully this will be resolved at the + September 2008 C++ meeting. */ + || !was_decl) ok = true; } } diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist5.C b/gcc/testsuite/g++.dg/cpp0x/initlist5.C index 0d02fd4..fbdc673 100644 --- a/gcc/testsuite/g++.dg/cpp0x/initlist5.C +++ b/gcc/testsuite/g++.dg/cpp0x/initlist5.C @@ -19,3 +19,7 @@ C c2 = { 1.1, 2 }; // { dg-error "narrowing" } int j { 1 }; // initialize to 1 int k {}; // initialize to 0 + +// PR c++/39693 +double d = 1.1; +float fa[] = { d, 1.1 }; // { dg-error "narrowing conversion of 'd'" } |