summaryrefslogtreecommitdiff
path: root/gcc/attribs.c
diff options
context:
space:
mode:
authoraldyh <aldyh@138bc75d-0d04-0410-961f-82ee72b054a4>2001-12-14 06:36:14 +0000
committeraldyh <aldyh@138bc75d-0d04-0410-961f-82ee72b054a4>2001-12-14 06:36:14 +0000
commit908c695b13aad234b0df5821dce1cab8986d2ab5 (patch)
tree0206709f85ba3245fab535963e7a39aa96a96127 /gcc/attribs.c
parente1ed5a156b74603ecb62fc23f9edaa20a5c29c23 (diff)
downloadgcc-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.c15
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;