Hi!

These casts for P0138R2 isn't something the user typed in their code,
so diagnosing -Wignored-qualifiers on these looks wrong.
-Wuseless-cast has been handled similarly in the past already.

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

2018-01-18  Jakub Jelinek  <ja...@redhat.com>

        PR c++/83919
        * typeck.c (convert_for_assignment): Suppress warn_ignored_qualifiers
        for direct enum init.
        * decl.c (reshape_init): Likewise.

        * g++.dg/cpp0x/pr83919.C: New test.

--- gcc/cp/typeck.c.jj  2018-01-17 22:00:06.863228592 +0100
+++ gcc/cp/typeck.c     2018-01-18 10:58:39.976333499 +0100
@@ -8689,6 +8689,7 @@ convert_for_assignment (tree type, tree
       if (check_narrowing (ENUM_UNDERLYING_TYPE (type), elt, complain))
        {
          warning_sentinel w (warn_useless_cast);
+         warning_sentinel w2 (warn_ignored_qualifiers);
          rhs = cp_build_c_cast (type, elt, complain);
        }
       else
--- gcc/cp/decl.c.jj    2018-01-18 00:41:40.564015137 +0100
+++ gcc/cp/decl.c       2018-01-18 11:10:10.579713182 +0100
@@ -6091,6 +6091,7 @@ reshape_init (tree type, tree init, tsub
       if (check_narrowing (ENUM_UNDERLYING_TYPE (type), elt, complain))
        {
          warning_sentinel w (warn_useless_cast);
+         warning_sentinel w2 (warn_ignored_qualifiers);
          return cp_build_c_cast (type, elt, tf_warning_or_error);
        }
       else
--- gcc/testsuite/g++.dg/cpp0x/pr83919.C.jj     2018-01-18 11:03:08.048295967 
+0100
+++ gcc/testsuite/g++.dg/cpp0x/pr83919.C        2018-01-18 10:59:57.465322655 
+0100
@@ -0,0 +1,10 @@
+// PR c++/83919
+// { dg-do compile { target c++11 } }
+// { dg-options "-Wignored-qualifiers" }
+
+enum class Conf;
+struct foo
+{
+  foo (const Conf& conf) : x{conf} {}  // { dg-bogus "type qualifiers ignored 
on cast result type" }
+  const Conf x;
+};

        Jakub

Reply via email to