diff mbox

[C] Fix -Wunused-but-set-* on __builtin_shuffle (PR c/52577)

Message ID 20120313200904.GP16117@tyan-ft48-01.lab.bos.redhat.com
State New
Headers show

Commit Message

Jakub Jelinek March 13, 2012, 8:09 p.m. UTC
Hi!

We weren't calling mark_exp_read on these and thus we got false positive
-Wunused-but-set-* warnings.

Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux, ok
for trunk/4.7.1?

For trunk we should add __builtin_shuffle support even for C++ I'd say.

2012-03-13  Jakub Jelinek  <jakub@redhat.com>

	PR c/52577
	* c-parser.c (c_parser_postfix_expression)
	<case RID_BUILTIN_SHUFFLE>: Call mark_exp_read on argument values.

	* gcc.dg/Wunused-var-3.c: New test.


	Jakub

Comments

Joseph Myers March 13, 2012, 9:04 p.m. UTC | #1
On Tue, 13 Mar 2012, Jakub Jelinek wrote:

> 2012-03-13  Jakub Jelinek  <jakub@redhat.com>
> 
> 	PR c/52577
> 	* c-parser.c (c_parser_postfix_expression)
> 	<case RID_BUILTIN_SHUFFLE>: Call mark_exp_read on argument values.
> 
> 	* gcc.dg/Wunused-var-3.c: New test.

OK.
diff mbox

Patch

--- gcc/c-parser.c.jj	2012-01-02 20:39:55.000000000 +0100
+++ gcc/c-parser.c	2012-03-13 09:51:51.582984837 +0100
@@ -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 *p
 	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 *p
 		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
--- gcc/testsuite/gcc.dg/Wunused-var-3.c.jj	2012-03-13 09:52:53.802619513 +0100
+++ gcc/testsuite/gcc.dg/Wunused-var-3.c	2012-03-13 09:53:00.589578859 +0100
@@ -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);
+}