On Thu, Jun 20, 2019 at 07:57:08PM +0200, Jakub Jelinek wrote: > On Thu, Jun 20, 2019 at 12:49:13PM -0400, Marek Polacek wrote: > > Sorry about that. Does this patch work? > > > > 2019-06-20 Marek Polacek <pola...@redhat.com> > > > > * config/sh/sh.c (sh2a_function_vector_p): Use get_attribute_name. > > Just that? > grep is_attribute_p.*TREE_PURPOSE config/*/* > config/m32c/m32c.c: if (is_attribute_p ("interrupt", TREE_PURPOSE > (list))) > config/m32c/m32c.c: if (is_attribute_p ("bank_switch", TREE_PURPOSE > (list))) > config/m32c/m32c.c: if (is_attribute_p ("fast_interrupt", TREE_PURPOSE > (list))) > config/m32c/m32c.c: if (is_attribute_p ("function_vector", TREE_PURPOSE > (list))) > config/m32c/m32c.c: if (is_attribute_p ("function_vector", > TREE_PURPOSE (list))) > config/rl78/rl78.c: if (is_attribute_p ("saddr", TREE_PURPOSE (list))) > config/sh/sh.c: if (is_attribute_p ("sp_switch", TREE_PURPOSE > (attrs)) > config/sh/sh.c: || is_attribute_p ("trap_exit", TREE_PURPOSE > (attrs)) > config/sh/sh.c: || is_attribute_p ("nosave_low_regs", > TREE_PURPOSE (attrs)) > config/sh/sh.c: || is_attribute_p ("resbank", TREE_PURPOSE > (attrs))) > config/sh/sh.c: if (is_attribute_p ("function_vector", TREE_PURPOSE > (list))) > config/sh/sh.c: if (is_attribute_p ("function_vector", TREE_PURPOSE > (list)))
Here's a bunch of more; I've audited the uses of TREE_PURPOSE in config/*/*. I haven't tested it or anything, but... ok for trunk? 2019-06-20 Marek Polacek <pola...@redhat.com> * config/epiphany/epiphany.c (epiphany_compute_function_type): Use get_attribute_name. * config/m32c/m32c.c (interrupt_p): Likewise. (bank_switch_p): Likewise. (fast_interrupt_p): Likewise. (m32c_special_page_vector_p): Likewise. (current_function_special_page_vector): Likewise. * config/nds32/nds32.c (nds32_asm_function_prologue): Likewise. * config/rl78/rl78.c (rl78_attrlist_to_encoding): Likewise. * config/sh/sh.c (sh_insert_attributes): Likewise. (sh2a_get_function_vector_number): Likewise. diff --git gcc/config/epiphany/epiphany.c gcc/config/epiphany/epiphany.c index 657a8886ac7..2cc6c59eae3 100644 --- gcc/config/epiphany/epiphany.c +++ gcc/config/epiphany/epiphany.c @@ -1044,7 +1044,7 @@ epiphany_compute_function_type (tree decl) a; a = TREE_CHAIN (a)) { - tree name = TREE_PURPOSE (a); + tree name = get_attribute_name (a); if (name == get_identifier ("interrupt")) fn_type = EPIPHANY_FUNCTION_INTERRUPT; diff --git gcc/config/m32c/m32c.c gcc/config/m32c/m32c.c index 1a0d0c681b4..bda56e3beee 100644 --- gcc/config/m32c/m32c.c +++ gcc/config/m32c/m32c.c @@ -2858,7 +2858,7 @@ interrupt_p (tree node ATTRIBUTE_UNUSED) tree list = M32C_ATTRIBUTES (node); while (list) { - if (is_attribute_p ("interrupt", TREE_PURPOSE (list))) + if (is_attribute_p ("interrupt", get_attribute_name (list))) return 1; list = TREE_CHAIN (list); } @@ -2872,7 +2872,7 @@ bank_switch_p (tree node ATTRIBUTE_UNUSED) tree list = M32C_ATTRIBUTES (node); while (list) { - if (is_attribute_p ("bank_switch", TREE_PURPOSE (list))) + if (is_attribute_p ("bank_switch", get_attribute_name (list))) return 1; list = TREE_CHAIN (list); } @@ -2886,7 +2886,7 @@ fast_interrupt_p (tree node ATTRIBUTE_UNUSED) tree list = M32C_ATTRIBUTES (node); while (list) { - if (is_attribute_p ("fast_interrupt", TREE_PURPOSE (list))) + if (is_attribute_p ("fast_interrupt", get_attribute_name (list))) return 1; list = TREE_CHAIN (list); } @@ -2915,7 +2915,7 @@ m32c_special_page_vector_p (tree func) list = M32C_ATTRIBUTES (func); while (list) { - if (is_attribute_p ("function_vector", TREE_PURPOSE (list))) + if (is_attribute_p ("function_vector", get_attribute_name (list))) return 1; list = TREE_CHAIN (list); } @@ -2984,7 +2984,7 @@ current_function_special_page_vector (rtx x) list = M32C_ATTRIBUTES (t); while (list) { - if (is_attribute_p ("function_vector", TREE_PURPOSE (list))) + if (is_attribute_p ("function_vector", get_attribute_name (list))) { num = TREE_INT_CST_LOW (TREE_VALUE (TREE_VALUE (list))); return num; diff --git gcc/config/nds32/nds32.c gcc/config/nds32/nds32.c index eba98126705..ea532ce1eb3 100644 --- gcc/config/nds32/nds32.c +++ gcc/config/nds32/nds32.c @@ -2190,7 +2190,7 @@ nds32_asm_function_prologue (FILE *file) /* Display all attributes of this function. */ while (attrs) { - name = TREE_PURPOSE (attrs); + name = get_attribute_name (attrs); fprintf (file, "%s ", IDENTIFIER_POINTER (name)); /* Pick up the next attribute. */ diff --git gcc/config/rl78/rl78.c gcc/config/rl78/rl78.c index d2caa118281..067b966b48d 100644 --- gcc/config/rl78/rl78.c +++ gcc/config/rl78/rl78.c @@ -4532,7 +4532,7 @@ rl78_attrlist_to_encoding (tree list, tree decl ATTRIBUTE_UNUSED) { while (list) { - if (is_attribute_p ("saddr", TREE_PURPOSE (list))) + if (is_attribute_p ("saddr", get_attribute_name (list))) return 's'; list = TREE_CHAIN (list); } diff --git gcc/config/sh/sh.c gcc/config/sh/sh.c index dfaeab55142..5354d7960b0 100644 --- gcc/config/sh/sh.c +++ gcc/config/sh/sh.c @@ -8360,16 +8360,17 @@ sh_insert_attributes (tree node, tree *attributes) for (tail = attributes; attrs; attrs = TREE_CHAIN (attrs)) { - if (is_attribute_p ("sp_switch", TREE_PURPOSE (attrs)) - || is_attribute_p ("trap_exit", TREE_PURPOSE (attrs)) - || is_attribute_p ("nosave_low_regs", TREE_PURPOSE (attrs)) - || is_attribute_p ("resbank", TREE_PURPOSE (attrs))) + if (is_attribute_p ("sp_switch", get_attribute_name (attrs)) + || is_attribute_p ("trap_exit", get_attribute_name (attrs)) + || is_attribute_p ("nosave_low_regs", + get_attribute_name (attrs)) + || is_attribute_p ("resbank", get_attribute_name (attrs))) warning (OPT_Wattributes, "%qE attribute only applies to interrupt functions", - TREE_PURPOSE (attrs)); + get_attribute_name (attrs)); else { - *tail = tree_cons (TREE_PURPOSE (attrs), NULL_TREE, + *tail = tree_cons (get_attribute_name (attrs), NULL_TREE, NULL_TREE); tail = &TREE_CHAIN (*tail); } @@ -8537,7 +8538,7 @@ sh2a_get_function_vector_number (rtx x) return 0; for (tree list = SH_ATTRIBUTES (t); list; list = TREE_CHAIN (list)) - if (is_attribute_p ("function_vector", TREE_PURPOSE (list))) + if (is_attribute_p ("function_vector", get_attribute_name (list))) return TREE_INT_CST_LOW (TREE_VALUE (TREE_VALUE (list))); return 0;