public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] Fix PR77789
@ 2016-10-01 14:33 Richard Biener
  0 siblings, 0 replies; only message in thread
From: Richard Biener @ 2016-10-01 14:33 UTC (permalink / raw)
  To: gcc-patches


This fixes a type error.

Bootstrapped and tested on x86_64-unknown-linux-gnu, applied.

Richard.

2016-10-01  Richard Biener  <rguenther@suse.de>

	PR middle-end/77798
	* genmatch.c (get_operand_type): Add operand position arg
	and handle COND_EXPR comparison operand with fixed boolean_type_node.
	(expr::gen_transform): Adjust.
	(dt_simplify::gen_1): Likewise.

	* gfortran.fortran-torture/compile/pr77798.f90: New testcase.

Index: gcc/genmatch.c
===================================================================
--- gcc/genmatch.c	(revision 240647)
+++ gcc/genmatch.c	(working copy)
@@ -2216,11 +2216,12 @@ is_conversion (id_base *op)
 	  || *op == VIEW_CONVERT_EXPR);
 }
 
-/* Get the type to be used for generating operands of OP from the
+/* Get the type to be used for generating operand POS of OP from the
    various sources.  */
 
 static const char *
-get_operand_type (id_base *op, const char *in_type,
+get_operand_type (id_base *op, unsigned pos,
+		  const char *in_type,
 		  const char *expr_type,
 		  const char *other_oprnd_type)
 {
@@ -2235,6 +2236,9 @@ get_operand_type (id_base *op, const cha
   else if (is_a <operator_id *> (op)
 	   && strcmp (as_a <operator_id *> (op)->tcc, "tcc_comparison") == 0)
     return other_oprnd_type;
+  else if (*op == COND_EXPR
+	   && pos == 0)
+    return "boolean_type_node";
   else
     {
       /* Otherwise all types should match - choose one in order of
@@ -2319,7 +2323,7 @@ expr::gen_transform (FILE *f, int indent
       char dest[32];
       snprintf (dest, 32, "ops%d[%u]", depth, i);
       const char *optype
-	= get_operand_type (opr, in_type, expr_type,
+	= get_operand_type (opr, i, in_type, expr_type,
 			    i == 0 ? NULL : op0type);
       ops[i]->gen_transform (f, indent, dest, gimple, depth + 1, optype,
 			     cinfo, indexes,
@@ -3157,7 +3169,7 @@ dt_simplify::gen_1 (FILE *f, int indent,
 	      char dest[32];
 	      snprintf (dest, 32, "res_ops[%d]", j);
 	      const char *optype
-		= get_operand_type (opr,
+		= get_operand_type (opr, j,
 				    "type", e->expr_type,
 				    j == 0 ? NULL : "TREE_TYPE (res_ops[0])");
 	      /* We need to expand GENERIC conditions we captured from
@@ -3247,7 +3273,7 @@ dt_simplify::gen_1 (FILE *f, int indent,
 		  snprintf (dest, 32, "res_op%d", j);
 		}
 	      const char *optype
-	        = get_operand_type (opr,
+	        = get_operand_type (opr, j,
 				    "type", e->expr_type,
 				    j == 0
 				    ? NULL : "TREE_TYPE (res_op0)");
Index: gcc/testsuite/gfortran.fortran-torture/compile/pr77798.f90
===================================================================
--- gcc/testsuite/gfortran.fortran-torture/compile/pr77798.f90	(revision 0)
+++ gcc/testsuite/gfortran.fortran-torture/compile/pr77798.f90	(working copy)
@@ -0,0 +1,17 @@
+subroutine foo(self,value)
+integer(kind=kind(1)), dimension(:) :: self
+integer(kind=kind(1)), intent(in) :: value
+integer(kind=kind(1)) :: x,y,sign
+intent(inout) :: self
+integer(kind=kind(1)) :: len,i
+
+len = size(self)
+do i = 1,len
+  x = self(i)
+  if (x==0.0d0) cycle
+  y = abs(x)
+  sign = x/y
+  self(i) = sign*min(value,y)
+end do
+
+end subroutine

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2016-10-01 14:33 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-10-01 14:33 [PATCH] Fix PR77789 Richard Biener

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).