]> git.ipfire.org Git - thirdparty/gcc.git/commit
c++: -Wconversion vs value-dependent expressions [PR99331]
authorMarek Polacek <polacek@redhat.com>
Fri, 5 Mar 2021 01:20:40 +0000 (20:20 -0500)
committerMarek Polacek <polacek@redhat.com>
Thu, 25 Mar 2021 18:46:29 +0000 (14:46 -0400)
commit9efd72d28956eb79c7fca38e3c959733a3bb25bb
tree9b0f68d043434302324aec5adc59913ada762393
parent15d649f79d6b6dc336f6a32eec242b652a262a82
c++: -Wconversion vs value-dependent expressions [PR99331]

This PR complains that we issue a -Wconversion warning in

  template <int N> struct X {};
  template <class T> X<sizeof(T)> foo();

saying "conversion from 'long unsigned int' to 'int' may change value".
While it's not technically wrong, I suspect -Wconversion warnings aren't
all that useful for value-dependent expressions.  So this patch disables
them.  This is a regression that started with r241425:

@@ -7278,7 +7306,7 @@ convert_template_argument (tree parm,
          val = error_mark_node;
        }
    }
-      else if (!dependent_template_arg_p (orig_arg)
+      else if (!type_dependent_expression_p (orig_arg)
           && !uses_template_parms (t))
    /* We used to call digest_init here.  However, digest_init
       will report errors, which we don't want when complain

Here orig_arg is SIZEOF_EXPR<T>; dependent_template_arg_p (orig_arg) was
true, but type_dependent_expression_p (orig_arg) is false so we warn in
convert_nontype_argument.

gcc/cp/ChangeLog:

PR c++/99331
* call.c (build_converted_constant_expr_internal): Don't emit
-Wconversion warnings.

gcc/testsuite/ChangeLog:

PR c++/99331
* g++.dg/warn/Wconversion5.C: New test.
gcc/cp/call.c
gcc/testsuite/g++.dg/warn/Wconversion5.C [new file with mode: 0644]