From d2e312d7e54bb6d2c5b6446991a90548edb62d67 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Fri, 21 Oct 2011 20:01:31 +0000 Subject: [PATCH] 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 --- gcc/c-family/ChangeLog | 6 ++++++ gcc/c-family/c-common.c | 11 ----------- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/init.c | 3 ++- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/warn/Wconversion4.C | 17 +++++++++++++++++ 6 files changed, 36 insertions(+), 12 deletions(-) create mode 100644 gcc/testsuite/g++.dg/warn/Wconversion4.C diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index d0bcf0f87f8..706b27378d5 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 9d20d80981c..ae18de3929c 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 b58ee153457..f3eea05d5f9 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 4561979f72a..9115df3dba6 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 85aff916d9f..71aa33df3bd 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 00000000000..83daaa06928 --- /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; + } +};