re PR c++/49793 ([C++0x] Narrowing conversion from int/short/char to double)
authorJason Merrill <jason@redhat.com>
Sat, 23 Jul 2011 00:14:46 +0000 (20:14 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Sat, 23 Jul 2011 00:14:46 +0000 (20:14 -0400)
PR c++/49793
* typeck2.c (check_narrowing): Downgrade permerror to pedwarn.
Make conditional on -Wnarrowing.

From-SVN: r176665

gcc/c-family/ChangeLog
gcc/c-family/c.opt
gcc/cp/ChangeLog
gcc/cp/typeck2.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/initlist17.C
gcc/testsuite/g++.dg/cpp0x/initlist36.C
gcc/testsuite/g++.dg/cpp0x/initlist5.C
gcc/testsuite/g++.dg/cpp0x/initlist52.C
gcc/testsuite/g++.dg/cpp0x/initlist7.C

index 990302f17ce1ed7feabcd201ec7ec524b49e29b9..be7317d0eb28998f1c25b3adeede9b960a34a0c3 100644 (file)
@@ -1,5 +1,8 @@
 2011-07-22  Jason Merrill  <jason@redhat.com>
 
+       PR c++/49793
+       * c.opt (Wnarrowing): New.
+
        PR c++/30112
        * c-common.h: Declare c_linkage_bindings.
        * c-pragma.c (handle_pragma_redefine_extname): Use it.
index 00bdd93f1244e1ca2ebc2a5f88015c3419e6f25d..617ea2d89052c6312c0a975ca04297ffa533752b 100644 (file)
@@ -489,6 +489,10 @@ Wmultichar
 C ObjC C++ ObjC++ Warning
 Warn about use of multi-character character constants
 
+Wnarrowing
+C ObjC C++ ObjC++ Warning Var(warn_narrowing) Init(1)
+-Wno-narrowing   In C++0x mode, ignore ill-formed narrowing conversions within { }
+
 Wnested-externs
 C ObjC Var(warn_nested_externs) Warning
 Warn about \"extern\" declarations not at file scope
index cdbb3fe5ecbec1c5899417fa6e1ef0f69167e56e..284224f57c6c06f6bbe75d6108fa2e2cf8423783 100644 (file)
@@ -1,3 +1,9 @@
+2011-07-22  Jason Merrill  <jason@redhat.com>
+
+       PR c++/49793
+       * typeck2.c (check_narrowing): Downgrade permerror to pedwarn.
+       Make conditional on -Wnarrowing.
+
 2011-07-22  Ville Voutilainen  <ville.voutilainen@gmail.com>
 
        Warn about the use of final/override in non-c++0x mode, and
index bdd2452ffe133ec36bf163f89967c092841ce1ba..727a88bd363ab64ce5b1869fec2a0bdf00adcfcd 100644 (file)
@@ -719,7 +719,7 @@ check_narrowing (tree type, tree init)
   bool ok = true;
   REAL_VALUE_TYPE d;
 
-  if (!ARITHMETIC_TYPE_P (type))
+  if (!warn_narrowing || !ARITHMETIC_TYPE_P (type))
     return;
 
   if (BRACE_ENCLOSED_INITIALIZER_P (init)
@@ -777,8 +777,8 @@ check_narrowing (tree type, tree init)
     }
 
   if (!ok)
-    permerror (input_location, "narrowing conversion of %qE from %qT "
-              "to %qT inside { }", init, ftype, type);
+    pedwarn (input_location, OPT_Wnarrowing, "narrowing conversion of %qE "
+            "from %qT to %qT inside { }", init, ftype, type);
 }
 
 /* Process the initializer INIT for a variable of type TYPE, emitting
index a364c72a7e4afcef78ac494ba1fc1143cf15dc98..1d0d08952c5f04d0aedb846232c80dd5e3adb90d 100644 (file)
@@ -1,3 +1,8 @@
+2011-07-22  Jason Merrill  <jason@redhat.com>
+
+       PR c++/49793
+       * g++.dg/cpp0x/initlist55.C: New.
+
 2011-07-23  Tobias Burnus  <burnus@net-b.de>
 
        PR fortran/49791
index 86371e819699c7ec042aed396b22b88a9e5396fa..6ea08d1500394a3e3644f1c7ac6aa76e12b84dff 100644 (file)
@@ -1,4 +1,4 @@
-// { dg-options "-std=c++0x" }
+// { dg-options "-std=c++0x -pedantic-errors" }
 
 void f(int i);
 
index 94624c977c92ecb7c1efe61d9437dda237523cf9..a703b45907e37b7738f0dbebc6bd7725385f1691 100644 (file)
@@ -1,5 +1,5 @@
 // PR c++/44358
-// { dg-options "-std=c++0x" }
+// { dg-options "-std=c++0x -pedantic-errors" }
 
 #include <initializer_list>
 
index 32caac38251ae9bda880541139fbbef595be463e..dbd17ecbbe29ba170b976a236b3b88809c623131 100644 (file)
@@ -1,5 +1,5 @@
 // Test for narrowing diagnostics
-// { dg-options "-std=c++0x" }
+// { dg-options "-std=c++0x -pedantic-errors" }
 
 #include <initializer_list>
 
index 22bc2873c7c9517167ef44421b84fb0b6a2b48a1..17c0cfe3f149370b8c3e09812d74769e0d49da20 100644 (file)
@@ -1,5 +1,5 @@
 // PR c++/45378
-// { dg-options -std=c++0x }
+// { dg-options "-std=c++0x -pedantic-errors" }
 
 int main()
 {
index 7913ed7edb1ab566556e9661174685554a771b66..55a0371860fdb3317c0ce0bcbf5cd4e25834cad8 100644 (file)
@@ -1,5 +1,5 @@
 // PR c++/37932
-// { dg-options "-std=c++0x" }
+// { dg-options "-std=c++0x -pedantic-errors" }
 
 typedef enum { AA=1, BB=2 } my_enum;