diff options
author | aldyh <aldyh@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-12-14 06:36:14 +0000 |
---|---|---|
committer | aldyh <aldyh@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-12-14 06:36:14 +0000 |
commit | 908c695b13aad234b0df5821dce1cab8986d2ab5 (patch) | |
tree | 0206709f85ba3245fab535963e7a39aa96a96127 /gcc/attribs.c | |
parent | e1ed5a156b74603ecb62fc23f9edaa20a5c29c23 (diff) | |
download | gcc-908c695b13aad234b0df5821dce1cab8986d2ab5.tar.gz |
* attribs.c (c_common_attribute_table): Swap decl_req and type_req
for the mode attribute.
(handle_mode_attribute): Handle types, not decls.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@47990 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/attribs.c')
-rw-r--r-- | gcc/attribs.c | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/gcc/attribs.c b/gcc/attribs.c index 554591310d9..73d9d39961f 100644 --- a/gcc/attribs.c +++ b/gcc/attribs.c @@ -120,7 +120,7 @@ static const struct attribute_spec c_common_attribute_table[] = handle_constructor_attribute }, { "destructor", 0, 0, true, false, false, handle_destructor_attribute }, - { "mode", 1, 1, true, false, false, + { "mode", 1, 1, false, true, false, handle_mode_attribute }, { "section", 1, 1, true, false, false, handle_section_attribute }, @@ -761,8 +761,7 @@ handle_mode_attribute (node, name, args, flags, no_add_attrs) int flags ATTRIBUTE_UNUSED; bool *no_add_attrs; { - tree decl = *node; - tree type = TREE_TYPE (decl); + tree type = *node; *no_add_attrs = true; @@ -786,7 +785,7 @@ handle_mode_attribute (node, name, args, flags, no_add_attrs) p = newp; } - /* Give this decl a type with the specified mode. + /* Change this type to have a type with the specified mode. First check for the special modes. */ if (! strcmp (p, "byte")) mode = byte_mode; @@ -805,12 +804,8 @@ handle_mode_attribute (node, name, args, flags, no_add_attrs) TREE_UNSIGNED (type)))) error ("no data type for mode `%s'", p); else - { - TREE_TYPE (decl) = type = typefm; - DECL_SIZE (decl) = DECL_SIZE_UNIT (decl) = 0; - if (TREE_CODE (decl) != FIELD_DECL) - layout_decl (decl, 0); - } + *node = typefm; + /* No need to layout the type here. The caller should do this. */ } return NULL_TREE; |