[PATCH] Fix PR90901, debug-expr expansion of deleted labels

Richard Biener rguenther@suse.de
Tue Jun 18 08:16:00 GMT 2019


The following deals with
  (note/s 5 0 0 ("lab") NOTE_INSN_DELETED_LABEL 2)
appearing in DECL_RTL of LABEL_DECLs which expand_debug_expr doesn't
expect.  copy_rtx cannot deal with any notes so the following simply
treats NOTE_P DECL_RTL as if it was optimized away.

Bootstrap / regtest running on x86_64-unknown-linux-gnu.

Richard.

2019-06-18  Richard Biener  <rguenther@suse.de>

	PR debug/90900
	* cfgexpand.c (expand_debug_expr): Treat NOTE_P DECL_RTL
	as if optimized away.

	* gcc.dg/gomp/pr90900.c: New testcase.

Index: gcc/cfgexpand.c
===================================================================
--- gcc/cfgexpand.c	(revision 272405)
+++ gcc/cfgexpand.c	(working copy)
@@ -4387,7 +4387,11 @@ expand_debug_expr (tree exp)
       op0 = DECL_RTL_IF_SET (exp);
 
       /* This decl was probably optimized away.  */
-      if (!op0)
+      if (!op0
+	  /* At least label RTXen are sometimes replaced by
+	     NOTE_INSN_DELETED_LABEL.  Any notes here are not
+	     handled by copy_rtx.  */
+	  || NOTE_P (op0))
 	{
 	  if (!VAR_P (exp)
 	      || DECL_EXTERNAL (exp)
Index: gcc/testsuite/gcc.dg/gomp/pr90900.c
===================================================================
--- gcc/testsuite/gcc.dg/gomp/pr90900.c	(nonexistent)
+++ gcc/testsuite/gcc.dg/gomp/pr90900.c	(working copy)
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-O2 -fopenmp -g" } */
+
+void f (int a)
+{
+  void *x = &&lab;
+#pragma omp parallel
+  if (a)
+    { lab: __builtin_unreachable(); }
+  x;
+}



More information about the Gcc-patches mailing list