OSDN Git Service

* attribs.c (c_common_attribute_table): Swap decl_req and type_req
authoraldyh <aldyh@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 14 Dec 2001 06:36:14 +0000 (06:36 +0000)
committeraldyh <aldyh@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 14 Dec 2001 06:36:14 +0000 (06:36 +0000)
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

gcc/ChangeLog
gcc/attribs.c

index 4b83230..f02961d 100644 (file)
@@ -1,4 +1,4 @@
-2001-12-09  Aldy Hernandez  <aldyh@redhat.com>
+2001-12-13  Aldy Hernandez  <aldyh@redhat.com>
 
         * attribs.c (c_common_attribute_table): Swap decl_req and type_req
        for the mode attribute.
index 5545913..73d9d39 100644 (file)
@@ -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;