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 --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;
--
1.8.5.3