Two more POLY_INT cases for dwarf2out.c
authorRichard Sandiford <richard.sandiford@arm.com>
Wed, 18 Sep 2019 09:43:10 +0000 (09:43 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Wed, 18 Sep 2019 09:43:10 +0000 (09:43 +0000)
loc_list_for_tree_1 and add_const_value_attribute currently ICE
on POLY_INTs.  loc_list_for_tree_1 can do something sensible but
add_const_value_attribute has to punt, since the constant there
needs to be a link-time rather than load-time or run-time constant.

This is tested by later SVE patches.

2019-09-18  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* dwarf2out.c (loc_list_from_tree_1): Handle POLY_INT_CST.
(add_const_value_attribute): Handle CONST_POLY_INT.

From-SVN: r275868

gcc/ChangeLog
gcc/dwarf2out.c

index 5407096dff140e089a962e0a5e45e5abe0f2a418..7f8425ba0f90314ea995341ea848a6ff63d91605 100644 (file)
@@ -1,3 +1,8 @@
+2019-09-18  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * dwarf2out.c (loc_list_from_tree_1): Handle POLY_INT_CST.
+       (add_const_value_attribute): Handle CONST_POLY_INT.
+
 2019-09-18  Martin Liska  <mliska@suse.cz>
 
        * dbgcnt.def (store_merging): New counter.
index 5698c82f7dfe3a397fb1a83d14307c0287931342..cec25fa5fa2b80edfc4afa46afc2ed862a83a6da 100644 (file)
@@ -18568,6 +18568,24 @@ loc_list_from_tree_1 (tree loc, int want_address,
        }
       break;
 
+    case POLY_INT_CST:
+      {
+       if (want_address)
+         {
+           expansion_failed (loc, NULL_RTX,
+                             "constant address with a runtime component");
+           return 0;
+         }
+       poly_int64 value;
+       if (!poly_int_tree_p (loc, &value))
+         {
+           expansion_failed (loc, NULL_RTX, "constant too big");
+           return 0;
+         }
+       ret = int_loc_descriptor (value);
+      }
+      break;
+
     case CONSTRUCTOR:
     case REAL_CST:
     case STRING_CST:
@@ -19684,6 +19702,7 @@ add_const_value_attribute (dw_die_ref die, rtx rtl)
     case MINUS:
     case SIGN_EXTEND:
     case ZERO_EXTEND:
+    case CONST_POLY_INT:
       return false;
 
     case MEM: