OSDN Git Service

PR target/28648 c:
authordannysmith <dannysmith@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 20 Aug 2006 08:46:13 +0000 (08:46 +0000)
committerdannysmith <dannysmith@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 20 Aug 2006 08:46:13 +0000 (08:46 +0000)
* tree.c (handle_dll_attribute): Return early if not a
    var or function decl.

testsuite
* gcc.dg/attr-invalid.c: Add tests for invalid dllimport.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@116270 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/attr-invalid.c
gcc/tree.c

index 3dbd11b..6104ecd 100644 (file)
@@ -1,3 +1,9 @@
+006-08-20  Danny Smith  <dannysmith@users.sourceforge.net>
+
+       PR target/28648 c:
+       * tree.c (handle_dll_attribute): Return early if not a
+       var or function decl.
+
 2006-08-18  Joseph Myers  <joseph@codesourcery.com>
 
        PR target/27565
index ad646c5..abaa9b7 100644 (file)
@@ -1,3 +1,8 @@
+2006-08-20  Danny Smith  <dannysmith@users.sourceforge.net>
+
+       PR target/28648 c:
+       * gcc.dg/attr-invalid.c: Add tests for invalid dllimport.
+
 2006-08-20  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/28630
index c6c437d..7d1c151 100644 (file)
@@ -77,3 +77,24 @@ int ATSYM(fn_knrarg) (arg)
 { return 0; }
 
 int ATSYM(fn_isoarg) (int arg ATTR) { return 0; } /* { dg-warning "attribute ignored" "" } */
+
+
+/* PR target/28648  */
+/* These are invalid on all targets.  Applying to PARM_ or FIELD_DECL
+   also caused a tree checking ice on targets that support dllimport.  */
+#undef AT
+#define AT dllimport
+
+typedef int ATSYM(type) ATTR; /* { dg-warning "attribute ignored" "" } */
+
+typedef int (*ATSYM(fntype))(void) ATTR; /* { dg-warning "attribute ignored" "" } */
+
+struct ATSYM(struct) {
+  char dummy ATTR; /* { dg-warning "attribute ignored" "" } */
+};
+
+int ATSYM(fn_knrarg) (arg)
+  int arg ATTR; /* { dg-warning "attribute ignored" "" } */
+{ return 0; }
+
+int ATSYM(fn_isoarg) (int arg ATTR) { return 0; } /* { dg-warning "attribute ignored" "" } */
index 2c95a26..a58c327 100644 (file)
@@ -3706,9 +3706,18 @@ handle_dll_attribute (tree * pnode, tree name, tree args, int flags,
       return NULL_TREE;
     }
 
+  if (TREE_CODE (node) != FUNCTION_DECL
+      && TREE_CODE (node) != VAR_DECL)
+    {
+      *no_add_attrs = true;
+      warning (OPT_Wattributes, "%qs attribute ignored",
+              IDENTIFIER_POINTER (name));
+      return NULL_TREE;
+    }
+
   /* Report error on dllimport ambiguities seen now before they cause
      any damage.  */
-  if (is_attribute_p ("dllimport", name))
+  else if (is_attribute_p ("dllimport", name))
     {
       /* Honor any target-specific overrides. */ 
       if (!targetm.valid_dllimport_attribute_p (node))