This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Fix devirt to NULL


This fixes Honzas previous commit to not build &integer_zero_node (what?).

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

Richard.

2014-08-19  Richard Biener  <rguenther@suse.de>

	* gimple-fold.c (fold_gimple_assign): Properly build a
	null-pointer constant when devirtualizing addresses.

Index: gcc/gimple-fold.c
===================================================================
--- gcc/gimple-fold.c	(revision 214135)
+++ gcc/gimple-fold.c	(working copy)
@@ -319,14 +319,6 @@ fold_gimple_assign (gimple_stmt_iterator
 		  = possible_polymorphic_call_targets (rhs, stmt, &final);
 		if (final && targets.length () <= 1 && dbg_cnt (devirt))
 		  {
-		    tree fndecl;
-
-		    if (targets.length () == 1)
-		      fndecl = targets[0]->decl;
-		    else
-		      /* We can not use __builtin_unreachable here because it
-			 can not have address taken.  */
-		      fndecl = integer_zero_node;
 		    if (dump_enabled_p ())
 		      {
 			location_t loc = gimple_location_safe (stmt);
@@ -335,11 +327,19 @@ fold_gimple_assign (gimple_stmt_iterator
 					 "reference to function %s\n",
 					 targets.length () == 1
 					 ? targets[0]->name ()
-					 : "__builtin_unreachable");
+					 : "NULL");
+		      }
+		    if (targets.length () == 1)
+		      {
+			val = fold_convert (TREE_TYPE (val),
+					    build_fold_addr_expr_loc
+					      (loc, targets[0]->decl));
+			STRIP_USELESS_TYPE_CONVERSION (val);
 		      }
-		    val = fold_convert (TREE_TYPE (val),
-					build_fold_addr_expr_loc (loc, fndecl));
-		    STRIP_USELESS_TYPE_CONVERSION (val);
+		    else
+		      /* We can not use __builtin_unreachable here because it
+			 can not have address taken.  */
+		      val = build_int_cst (TREE_TYPE (val), 0);
 		    return val;
 		  }
 	      }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]