re PR debug/91231 (ICE in dwarf2out_inline_entry, at dwarf2out.c:27642)
authorRichard Biener <rguenther@suse.de>
Tue, 23 Jul 2019 10:45:59 +0000 (10:45 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 23 Jul 2019 10:45:59 +0000 (10:45 +0000)
2019-07-23  Richard Biener  <rguenther@suse.de>

PR debug/91231
* lto-streamer-in.c (input_function): Drop inline-entry markers
that ended up with an unknown location block.

From-SVN: r273733

gcc/ChangeLog
gcc/lto-streamer-in.c

index 1add332e0fe98793f37d72ead013b4254e7eca85..41058783c0b33e999bc21b956e20e6537f84350e 100644 (file)
@@ -1,3 +1,9 @@
+2019-07-23  Richard Biener  <rguenther@suse.de>
+
+       PR debug/91231
+       * lto-streamer-in.c (input_function): Drop inline-entry markers
+       that ended up with an unknown location block.
+
 2019-07-23  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/83518
index 155805b3c433acd7a03aae76c3506bbc20f12f34..3158edd4c5f337f6664f02bc918b5bd5e308b0f8 100644 (file)
@@ -1141,6 +1141,14 @@ input_function (tree fn_decl, class data_in *data_in,
                      ? !MAY_HAVE_DEBUG_MARKER_STMTS
                      : !MAY_HAVE_DEBUG_BIND_STMTS))
                remove = true;
+             /* In case the linemap overflows locations can be dropped
+                to zero.  Thus do not keep nonsensical inline entry markers
+                we'd later ICE on.  */
+             tree block;
+             if (gimple_debug_inline_entry_p (stmt)
+                 && (block = gimple_block (stmt))
+                 && !inlined_function_outer_scope_p (block))
+               remove = true;
              if (is_gimple_call (stmt)
                  && gimple_call_internal_p (stmt))
                {