re PR c/59871 (No unused value warning for comma expression)
PR c/59871 c/ * c-typeck.c (build_compound_expr): Warn even for right-hand operand of a comma expression. (emit_side_effect_warnings): Likewise. libdecnumber/ * decNumberLocal.h (UBFROMUS, UBFROMUI): Remove last argument. testsuite/ * gcc.dg/20020220-2.c: Adjust dg-warning message. * gcc.dg/pr59871.c: New test. From-SVN: r207002
This commit is contained in:
parent
20f18c3ce1
commit
789eadcd54
7 changed files with 79 additions and 6 deletions
|
@ -1,3 +1,10 @@
|
|||
2014-01-23 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c/59871
|
||||
* c-typeck.c (build_compound_expr): Warn even for right-hand operand
|
||||
of a comma expression.
|
||||
(emit_side_effect_warnings): Likewise.
|
||||
|
||||
2014-01-23 Balaji V. Iyer <balaji.v.iyer@intel.com>
|
||||
|
||||
PR c/59825
|
||||
|
|
|
@ -4778,6 +4778,23 @@ build_compound_expr (location_t loc, tree expr1, tree expr2)
|
|||
"left-hand operand of comma expression has no effect");
|
||||
}
|
||||
}
|
||||
else if (TREE_CODE (expr1) == COMPOUND_EXPR
|
||||
&& warn_unused_value)
|
||||
{
|
||||
tree r = expr1;
|
||||
location_t cloc = loc;
|
||||
while (TREE_CODE (r) == COMPOUND_EXPR)
|
||||
{
|
||||
if (EXPR_HAS_LOCATION (r))
|
||||
cloc = EXPR_LOCATION (r);
|
||||
r = TREE_OPERAND (r, 1);
|
||||
}
|
||||
if (!TREE_SIDE_EFFECTS (r)
|
||||
&& !VOID_TYPE_P (TREE_TYPE (r))
|
||||
&& !CONVERT_EXPR_P (r))
|
||||
warning_at (cloc, OPT_Wunused_value,
|
||||
"right-hand operand of comma expression has no effect");
|
||||
}
|
||||
|
||||
/* With -Wunused, we should also warn if the left-hand operand does have
|
||||
side-effects, but computes a value which is not used. For example, in
|
||||
|
@ -9643,6 +9660,23 @@ emit_side_effect_warnings (location_t loc, tree expr)
|
|||
if (!VOID_TYPE_P (TREE_TYPE (expr)) && !TREE_NO_WARNING (expr))
|
||||
warning_at (loc, OPT_Wunused_value, "statement with no effect");
|
||||
}
|
||||
else if (TREE_CODE (expr) == COMPOUND_EXPR)
|
||||
{
|
||||
tree r = expr;
|
||||
location_t cloc = loc;
|
||||
while (TREE_CODE (r) == COMPOUND_EXPR)
|
||||
{
|
||||
if (EXPR_HAS_LOCATION (r))
|
||||
cloc = EXPR_LOCATION (r);
|
||||
r = TREE_OPERAND (r, 1);
|
||||
}
|
||||
if (!TREE_SIDE_EFFECTS (r)
|
||||
&& !VOID_TYPE_P (TREE_TYPE (r))
|
||||
&& !CONVERT_EXPR_P (r)
|
||||
&& !TREE_NO_WARNING (expr))
|
||||
warning_at (cloc, OPT_Wunused_value,
|
||||
"right-hand operand of comma expression has no effect");
|
||||
}
|
||||
else
|
||||
warn_if_unused_value (expr, loc);
|
||||
}
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2014-01-23 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c/59871
|
||||
* gcc.dg/20020220-2.c: Adjust dg-warning message.
|
||||
* gcc.dg/pr59871.c: New test.
|
||||
|
||||
2014-01-23 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/58980
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* PR c/4697
|
||||
Test whether value computed not used warning is given for compound
|
||||
Test whether operand has no effect warning is given for compound
|
||||
expression. */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -Wunused" } */
|
||||
|
@ -7,6 +7,6 @@
|
|||
int b;
|
||||
int foo (int a)
|
||||
{
|
||||
a = a + 1, 5 * b; /* { dg-warning "value computed is not used" } */
|
||||
a = a + 1, 5 * b; /* { dg-warning "right-hand operand of comma expression has no effect" } */
|
||||
return a;
|
||||
}
|
||||
|
|
22
gcc/testsuite/gcc.dg/pr59871.c
Normal file
22
gcc/testsuite/gcc.dg/pr59871.c
Normal file
|
@ -0,0 +1,22 @@
|
|||
/* PR c/59871 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-Wunused" } */
|
||||
|
||||
extern int bar ();
|
||||
|
||||
void
|
||||
foo (int *p, int i)
|
||||
{
|
||||
p[0] = (bar (), 1, bar ()); /* { dg-warning "right-hand operand of comma expression has no effect" } */
|
||||
p[1] = (1, bar ()); /* { dg-warning "left-hand operand of comma expression has no effect" } */
|
||||
bar (), 1, bar (); /* { dg-warning "right-hand operand of comma expression has no effect" } */
|
||||
bar (), 1; /* { dg-warning "right-hand operand of comma expression has no effect" } */
|
||||
1, bar (); /* { dg-warning "left-hand operand of comma expression has no effect" } */
|
||||
(bar (), 1); /* { dg-warning "right-hand operand of comma expression has no effect" } */
|
||||
bar (), 5 * i; /* { dg-warning "right-hand operand of comma expression has no effect" } */
|
||||
(bar (), 5 * i); /* { dg-warning "right-hand operand of comma expression has no effect" } */
|
||||
(bar (), (bar (), (bar (), (bar (), (bar (), (bar (), (bar (), 7))))))); /* { dg-warning "right-hand operand of comma expression has no effect" } */
|
||||
bar (), (bar (), (bar (), (bar (), (bar (), (bar (), (bar (), 7)))))); /* { dg-warning "right-hand operand of comma expression has no effect" } */
|
||||
bar (), (bar (), (bar (), (bar (), (bar (), (bar (), (7, bar ())))))); /* { dg-warning "left-hand operand of comma expression has no effect" } */
|
||||
(bar (), (bar (), (bar (), (bar (), (bar (), (bar (), (7, bar ()))))))); /* { dg-warning "left-hand operand of comma expression has no effect" } */
|
||||
}
|
|
@ -1,3 +1,8 @@
|
|||
2014-01-23 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c/59871
|
||||
* decNumberLocal.h (UBFROMUS, UBFROMUI): Remove last argument.
|
||||
|
||||
2014-01-02 Richard Sandiford <rdsandiford@googlemail.com>
|
||||
|
||||
Update copyright years
|
||||
|
|
|
@ -153,10 +153,9 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
|
|||
#define UBTOUI(b) (memcpy((void *)&uiwork, b, 4), uiwork)
|
||||
|
||||
/* Store a uInt, etc., into bytes starting at a char* or uByte*. */
|
||||
/* Returns i, evaluated, for convenience; has to use uiwork because */
|
||||
/* i may be an expression. */
|
||||
#define UBFROMUS(b, i) (uswork=(i), memcpy(b, (void *)&uswork, 2), uswork)
|
||||
#define UBFROMUI(b, i) (uiwork=(i), memcpy(b, (void *)&uiwork, 4), uiwork)
|
||||
/* Has to use uiwork because i may be an expression. */
|
||||
#define UBFROMUS(b, i) (uswork=(i), memcpy(b, (void *)&uswork, 2))
|
||||
#define UBFROMUI(b, i) (uiwork=(i), memcpy(b, (void *)&uiwork, 4))
|
||||
|
||||
/* X10 and X100 -- multiply integer i by 10 or 100 */
|
||||
/* [shifts are usually faster than multiply; could be conditional] */
|
||||
|
|
Loading…
Add table
Reference in a new issue