From: paolo Date: Fri, 21 Oct 2011 20:01:31 +0000 (+0000) Subject: /cp X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=commitdiff_plain;h=5f7504f9fe1331551bba34c3d058294029064c90 /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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180312 138bc75d-0d04-0410-961f-82ee72b054a4 --- 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,5 +1,11 @@ 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 * typeck2.c (cxx_incomplete_type_diagnostic): Improve error message for invalid use of member function. 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; + } +};