From 7a4418a53e80d38918a1f7ca4b8c2050cde08a24 Mon Sep 17 00:00:00 2001 From: Jozef Lawrynowicz Date: Tue, 3 Sep 2019 20:36:49 +0000 Subject: Implement TARGET_HANDLE_GENERIC_ATTRIBUTE gcc/ChangeLog: 2019-09-03 Jozef Lawrynowicz * config/msp430/msp430.c (TARGET_HANDLE_GENERIC_ATTRIBUTE): Define. (msp430_handle_generic_attribute): New function. * doc/tm.texi: Regenerate. * doc/tm.texi.in: Add TARGET_HANDLE_GENERIC_ATTRIBUTE. * hooks.c (hook_tree_treeptr_tree_tree_int_boolptr_null): New. * hooks.h (hook_tree_treeptr_tree_tree_int_boolptr_null): New. * target.def: Define new hook TARGET_HANDLE_GENERIC_ATTRIBUTE. gcc/c-family/ChangeLog: 2019-09-03 Jozef Lawrynowicz * c-attribs.c (handle_section_attribute): Call the handle_generic_attribute target hook after performing target independent processing. (handle_noinit_attribute): Likewise. From-SVN: r275355 --- gcc/c-family/c-attribs.c | 39 +++++++++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 10 deletions(-) (limited to 'gcc/c-family/c-attribs.c') diff --git a/gcc/c-family/c-attribs.c b/gcc/c-family/c-attribs.c index 820c83f..6500b99 100644 --- a/gcc/c-family/c-attribs.c +++ b/gcc/c-family/c-attribs.c @@ -1875,6 +1875,7 @@ handle_section_attribute (tree *node, tree ARG_UNUSED (name), tree args, int ARG_UNUSED (flags), bool *no_add_attrs) { tree decl = *node; + tree res = NULL_TREE; if (!targetm_common.have_named_sections) { @@ -1922,12 +1923,20 @@ handle_section_attribute (tree *node, tree ARG_UNUSED (name), tree args, goto fail; } - set_decl_section_name (decl, TREE_STRING_POINTER (TREE_VALUE (args))); - return NULL_TREE; + res = targetm.handle_generic_attribute (node, name, args, flags, + no_add_attrs); + + /* If the back end confirms the attribute can be added then continue onto + final processing. */ + if (!(*no_add_attrs)) + { + set_decl_section_name (decl, TREE_STRING_POINTER (TREE_VALUE (args))); + return res; + } fail: *no_add_attrs = true; - return NULL_TREE; + return res; } /* If in c++-11, check if the c++-11 alignment constraint with respect @@ -2249,6 +2258,7 @@ handle_noinit_attribute (tree * node, bool *no_add_attrs) { const char *message = NULL; + tree res = NULL_TREE; gcc_assert (DECL_P (*node)); gcc_assert (args == NULL); @@ -2271,14 +2281,23 @@ handle_noinit_attribute (tree * node, *no_add_attrs = true; } else - /* If this var is thought to be common, then change this. Common - variables are assigned to sections before the backend has a - chance to process them. Do this only if the attribute is - valid. */ - if (DECL_COMMON (*node)) - DECL_COMMON (*node) = 0; + { + res = targetm.handle_generic_attribute (node, name, args, flags, + no_add_attrs); + /* If the back end confirms the attribute can be added then continue onto + final processing. */ + if (!(*no_add_attrs)) + { + /* If this var is thought to be common, then change this. Common + variables are assigned to sections before the backend has a + chance to process them. Do this only if the attribute is + valid. */ + if (DECL_COMMON (*node)) + DECL_COMMON (*node) = 0; + } + } - return NULL_TREE; + return res; } -- cgit v1.1