From: Paolo Carlini Date: Fri, 21 Oct 2011 20:01:31 +0000 (+0000) Subject: re PR c++/45385 (missing -Wconversion for method calls) X-Git-Tag: releases/gcc-4.7.0~2908 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d2e312d7e54bb6d2c5b6446991a90548edb62d67;p=thirdparty%2Fgcc.git re PR c++/45385 (missing -Wconversion for method calls) /cp 2011-10-21 Paolo Carlini PR c++/45385 * init.c (build_vec_init): Early return error_mark_node if maxindex is -1. /c-family 2011-10-21 Paolo Carlini PR c++/45385 * c-common.c (conversion_warning): Remove code looking for artificial operands. /testsuite 2011-10-21 Paolo Carlini PR c++/45385 * g++.dg/warn/Wconversion4.C: New. From-SVN: r180312 --- diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index d0bcf0f87f86..706b27378d56 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,9 @@ +2011-10-21 Paolo Carlini + + PR c++/45385 + * c-common.c (conversion_warning): Remove code looking for + artificial operands. + 2011-10-18 Dodji Seketeli PR bootstrap/50760 diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c index 9d20d80981c3..ae18de3929cb 100644 --- a/gcc/c-family/c-common.c +++ b/gcc/c-family/c-common.c @@ -2121,23 +2121,12 @@ unsafe_conversion_p (tree type, tree expr, bool produce_warns) static void conversion_warning (tree type, tree expr) { - int i; - const int expr_num_operands = TREE_OPERAND_LENGTH (expr); tree expr_type = TREE_TYPE (expr); location_t loc = EXPR_LOC_OR_HERE (expr); if (!warn_conversion && !warn_sign_conversion) return; - /* If any operand is artificial, then this expression was generated - by the compiler and we do not warn. */ - for (i = 0; i < expr_num_operands; i++) - { - tree op = TREE_OPERAND (expr, i); - if (op && DECL_P (op) && DECL_ARTIFICIAL (op)) - return; - } - switch (TREE_CODE (expr)) { case EQ_EXPR: diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index b58ee153457a..f3eea05d5f93 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2011-10-21 Paolo Carlini + + PR c++/45385 + * init.c (build_vec_init): Early return error_mark_node if + maxindex is -1. + 2011-10-21 Paolo Carlini PR c++/31423 diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 4561979f72a7..9115df3dba69 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -2998,7 +2998,8 @@ build_vec_init (tree base, tree maxindex, tree init, if (TREE_CODE (atype) == ARRAY_TYPE && TYPE_DOMAIN (atype)) maxindex = array_type_nelts (atype); - if (maxindex == NULL_TREE || maxindex == error_mark_node) + if (maxindex == NULL_TREE || maxindex == error_mark_node + || integer_all_onesp (maxindex)) return error_mark_node; if (explicit_value_init_p) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 85aff916d9fa..71aa33df3bd6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-10-21 Paolo Carlini + + PR c++/45385 + * g++.dg/warn/Wconversion4.C: New. + 2011-10-21 Jakub Jelinek PR target/50813 diff --git a/gcc/testsuite/g++.dg/warn/Wconversion4.C b/gcc/testsuite/g++.dg/warn/Wconversion4.C new file mode 100644 index 000000000000..83daaa06928c --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wconversion4.C @@ -0,0 +1,17 @@ +// PR c++/45385 +// { dg-options "-Wconversion" } + +void foo(unsigned char); + +class Test +{ + void eval() + { + foo(bar()); // { dg-warning "may alter its value" } + } + + unsigned int bar() const + { + return __INT_MAX__ * 2U + 1; + } +};