diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2854c117360..079fcba199a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2012-03-13 Jakub Jelinek + PR c/52577 + * c-parser.c (c_parser_postfix_expression) + : Call mark_exp_read on argument values. + * config/i386/smmintrin.h: Avoid /* within a comment. * config/i386/nmmintrin.h: Likewise. diff --git a/gcc/c-parser.c b/gcc/c-parser.c index 867ab4183ad..56134c24e50 100644 --- a/gcc/c-parser.c +++ b/gcc/c-parser.c @@ -1,7 +1,7 @@ /* Parser for C and Objective-C. Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011 - Free Software Foundation, Inc. + 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011, + 2012 Free Software Foundation, Inc. Parser actions based on the old Bison parser; structure somewhat influenced by and fragments based on the C++ parser. @@ -6647,6 +6647,8 @@ c_parser_postfix_expression (c_parser *parser) case RID_BUILTIN_SHUFFLE: { VEC(c_expr_t,gc) *cexpr_list; + unsigned int i; + c_expr_t *p; c_parser_consume_token (parser); if (!c_parser_get_builtin_args (parser, @@ -6657,6 +6659,9 @@ c_parser_postfix_expression (c_parser *parser) break; } + FOR_EACH_VEC_ELT (c_expr_t, cexpr_list, i, p) + mark_exp_read (p->value); + if (VEC_length (c_expr_t, cexpr_list) == 2) expr.value = c_build_vec_perm_expr diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 96b775ea746..2824244a7f8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-03-13 Jakub Jelinek + + PR c/52577 + * gcc.dg/Wunused-var-3.c: New test. + 2012-03-13 Martin Jambor * gcc.dg/misaligned-expand-2.c: New test. diff --git a/gcc/testsuite/gcc.dg/Wunused-var-3.c b/gcc/testsuite/gcc.dg/Wunused-var-3.c new file mode 100644 index 00000000000..5954c3b1be7 --- /dev/null +++ b/gcc/testsuite/gcc.dg/Wunused-var-3.c @@ -0,0 +1,34 @@ +/* PR c/52577 */ +/* { dg-do compile } */ +/* { dg-options "-Wunused" } */ + +typedef int V __attribute__((vector_size (sizeof (int) * 4))); + +void +f1 (V *p) +{ + V mask = { 1, 2, 3, 0 }; + *p = __builtin_shuffle (*p, mask); +} + +void +f2 (V *p, V *q) +{ + V mask = { 1, 2, 3, 0 }; + *p = __builtin_shuffle (*p, *q, mask); +} + +void +f3 (V *p, V *mask) +{ + V a = { 1, 2, 3, 0 }; + *p = __builtin_shuffle (a, *mask); +} + +void +f4 (V *p, V *mask) +{ + V a = { 1, 2, 3, 0 }; + V b = { 2, 3, 4, 1 }; + *p = __builtin_shuffle (a, b, *mask); +}