From: Jakub Jelinek Date: Fri, 4 Jun 2010 18:42:42 +0000 (+0200) Subject: re PR c++/44362 (Bogus set-but-not-used warning) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=16c821230be0a70133754e1101b5b053f48bbb69;p=gcc.git re PR c++/44362 (Bogus set-but-not-used warning) PR c++/44362 * call.c (build_conditional_expr): If both arg2 and arg3 are lvalues with the same type, call mark_lvalue_use on both. * c-c++-common/Wunused-var-10.c: New test. Co-Authored-By: Jason Merrill From-SVN: r160289 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index b2f6cd1de99..b949f5aacdc 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2010-06-04 Jakub Jelinek + Jason Merrill + + PR c++/44362 + * call.c (build_conditional_expr): If both arg2 and arg3 are lvalues + with the same type, call mark_lvalue_use on both. + 2010-06-03 Nathan Froyd * class.c (struct vtbl_init_data_s): Remove last_init field. diff --git a/gcc/cp/call.c b/gcc/cp/call.c index b9f1c7fd4ec..60cc4f219dc 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -3839,6 +3839,8 @@ build_conditional_expr (tree arg1, tree arg2, tree arg3, && same_type_p (arg2_type, arg3_type)) { result_type = arg2_type; + mark_lvalue_use (arg2); + mark_lvalue_use (arg3); goto valid_operands; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 617ae604651..dd4b2c206d6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-06-04 Jakub Jelinek + + PR c++/44362 + * c-c++-common/Wunused-var-10.c: New test. + 2010-06-04 Manuel López-Ibáñez PR c/25880 diff --git a/gcc/testsuite/c-c++-common/Wunused-var-10.c b/gcc/testsuite/c-c++-common/Wunused-var-10.c new file mode 100644 index 00000000000..16d5171d0bf --- /dev/null +++ b/gcc/testsuite/c-c++-common/Wunused-var-10.c @@ -0,0 +1,68 @@ +/* PR c++/44362 */ +/* { dg-options "-Wunused" } */ +/* { dg-do compile } */ + +int +f1 (int u, int v) +{ + int a, b, c, d, e, f, g, h, i; + a = u; + b = v; + c = u; + d = v; + e = u; + f = v; + g = u == 6 ? a : b; + h = 0 ? c : d; + i = 1 ? e : f; + return g + h + i; +} + +int +f2 (int u, int v) +{ + int a, b, c, d, e, f, g, h, i; + a = u; + b = v; + c = u; + d = v; + e = u; + f = v; + g = u == 6 ? a + 1 : b; + h = 0 ? c + 1 : d; + i = 1 ? e + 1 : f; + return g + h + i; +} + +int +f3 (int u, int v) +{ + int a, b, c, d, e, f, g, h, i; + a = u; + b = v; + c = u; + d = v; + e = u; + f = v; + g = u == 6 ? a : b + 1; + h = 0 ? c : d + 1; + i = 1 ? e : f + 1; + return g + h + i; +} + +int +f4 (int u, int v) +{ + int a, c, e, g, h, i; + long b, d, f; + a = u; + b = v; + c = u; + d = v; + e = u; + f = v; + g = u == 6 ? a : b; + h = 0 ? c : d; + i = 1 ? e : f; + return g + h + i; +}