diff mbox series

[11/11] config: handle location wrappers in various attributes (untested)

Message ID 1510973563-10046-12-git-send-email-dmalcolm@redhat.com
State New
Headers show
Series C++: locations for (almost) everything (PR 43486) | expand

Commit Message

David Malcolm Nov. 18, 2017, 2:52 a.m. UTC
This is incomplete, and untested, but covers some of the cases
where an attribute's value's TREE_CODE is tested (e.g. via STRING_CST).

Alternatively, maybe we need a helper function for extracting
the value (and location_t) of an attribute, issuing an error if it's
not a STRING_CST?

gcc/ChangeLog:
	* config/arc/arc.c (arc_handle_interrupt_attribute): Handle
	location wrapper.
	* config/epiphany/epiphany.c
	(epiphany_handle_interrupt_attribute): Likewise.
	(epiphany_handle_forwarder_attribute): Likewise.
	* config/ia64/ia64.c (ia64_handle_model_attribute): Likewise.
	* config/m32r/m32r.c (m32r_handle_model_attribute): Likewise.
	* config/mips/mips.c (mips_handle_interrupt_attr): Likewise.
	(mips_handle_use_shadow_register_set_attr): Likewise.
	* config/msp430/msp430.c (msp430_attr): Likewise.
	* config/s390/s390.c (s390_handle_hotpatch_attribute): Likewise.
---
 gcc/config/arc/arc.c           | 2 ++
 gcc/config/epiphany/epiphany.c | 3 +++
 gcc/config/ia64/ia64.c         | 1 +
 gcc/config/m32r/m32r.c         | 2 ++
 gcc/config/mips/mips.c         | 2 ++
 gcc/config/msp430/msp430.c     | 2 +-
 gcc/config/s390/s390.c         | 2 ++
 7 files changed, 13 insertions(+), 1 deletion(-)
diff mbox series

Patch

diff --git a/gcc/config/arc/arc.c b/gcc/config/arc/arc.c
index 7be9f7c..d84c2ab 100644
--- a/gcc/config/arc/arc.c
+++ b/gcc/config/arc/arc.c
@@ -1922,6 +1922,8 @@  arc_handle_interrupt_attribute (tree *, tree name, tree args, int,
 
   tree value = TREE_VALUE (args);
 
+  STRIP_ANY_LOCATION_WRAPPER (value);
+
   if (TREE_CODE (value) != STRING_CST)
     {
       warning (OPT_Wattributes,
diff --git a/gcc/config/epiphany/epiphany.c b/gcc/config/epiphany/epiphany.c
index 26b0f3c..ac64d1f 100644
--- a/gcc/config/epiphany/epiphany.c
+++ b/gcc/config/epiphany/epiphany.c
@@ -496,6 +496,7 @@  epiphany_handle_interrupt_attribute (tree *node, tree name, tree args,
     }
 
   value = TREE_VALUE (args);
+  STRIP_ANY_LOCATION_WRAPPER (value);
 
   if (TREE_CODE (value) != STRING_CST)
     {
@@ -537,6 +538,8 @@  epiphany_handle_forwarder_attribute (tree *node ATTRIBUTE_UNUSED,
 
   value = TREE_VALUE (args);
 
+  STRIP_ANY_LOCATION_WRAPPER (value);
+
   if (TREE_CODE (value) != STRING_CST)
     {
       warning (OPT_Wattributes,
diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c
index 84a5b56..ae7f1f1 100644
--- a/gcc/config/ia64/ia64.c
+++ b/gcc/config/ia64/ia64.c
@@ -742,6 +742,7 @@  ia64_handle_model_attribute (tree *node, tree name, tree args,
 
   init_idents ();
   arg = TREE_VALUE (args);
+  STRIP_ANY_LOCATION_WRAPPER (arg);
   if (arg == small_ident1 || arg == small_ident2)
     {
       addr_area = ADDR_AREA_SMALL;
diff --git a/gcc/config/m32r/m32r.c b/gcc/config/m32r/m32r.c
index f104457..f12a8e9 100644
--- a/gcc/config/m32r/m32r.c
+++ b/gcc/config/m32r/m32r.c
@@ -399,6 +399,8 @@  m32r_handle_model_attribute (tree *node ATTRIBUTE_UNUSED, tree name,
   init_idents ();
   arg = TREE_VALUE (args);
 
+  STRIP_ANY_LOCATION_WRAPPER (arg);
+
   if (arg != small_ident1
       && arg != small_ident2
       && arg != medium_ident1
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index 7dde705..2b9f68a 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -1474,6 +1474,7 @@  mips_handle_interrupt_attr (tree *node ATTRIBUTE_UNUSED, tree name, tree args,
       tree cst;
 
       cst = TREE_VALUE (args);
+      STRIP_ANY_LOCATION_WRAPPER (cst);
       if (TREE_CODE (cst) != STRING_CST)
 	{
 	  warning (OPT_Wattributes,
@@ -1528,6 +1529,7 @@  mips_handle_use_shadow_register_set_attr (tree *node ATTRIBUTE_UNUSED,
       tree cst;
 
       cst = TREE_VALUE (args);
+      STRIP_ANY_LOCATION_WRAPPER (cst);
       if (TREE_CODE (cst) != STRING_CST)
 	{
 	  warning (OPT_Wattributes,
diff --git a/gcc/config/msp430/msp430.c b/gcc/config/msp430/msp430.c
index 0ee0b6c..ea40628 100644
--- a/gcc/config/msp430/msp430.c
+++ b/gcc/config/msp430/msp430.c
@@ -1867,7 +1867,7 @@  msp430_attr (tree * node,
       gcc_assert (TREE_NAME_EQ (name, ATTR_INTR));
 
       tree value = TREE_VALUE (args);
-
+      STRIP_ANY_LOCATION_WRAPPER (value);
       switch (TREE_CODE (value))
 	{
 	case STRING_CST:
diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c
index 4e08955..2d511b3 100644
--- a/gcc/config/s390/s390.c
+++ b/gcc/config/s390/s390.c
@@ -1110,6 +1110,8 @@  s390_handle_hotpatch_attribute (tree *node, tree name, tree args,
     {
       expr = TREE_VALUE (args);
       expr2 = TREE_VALUE (TREE_CHAIN (args));
+      STRIP_ANY_LOCATION_WRAPPER (expr);
+      STRIP_ANY_LOCATION_WRAPPER (expr2);
     }
   if (args == NULL || TREE_CHAIN (args) == NULL)
     err = 1;