OSDN Git Service

/cp
[pf3gnuchains/gcc-fork.git] / gcc / cp / class.c
index 4e051e3..9e0502f 100644 (file)
@@ -2458,6 +2458,7 @@ finish_struct_anon (tree t)
       if (DECL_NAME (field) == NULL_TREE
          && ANON_AGGR_TYPE_P (TREE_TYPE (field)))
        {
+         bool is_union = TREE_CODE (TREE_TYPE (field)) == UNION_TYPE;
          tree elt = TYPE_FIELDS (TREE_TYPE (field));
          for (; elt; elt = TREE_CHAIN (elt))
            {
@@ -2475,15 +2476,29 @@ finish_struct_anon (tree t)
 
              if (TREE_CODE (elt) != FIELD_DECL)
                {
-                 pedwarn ("%q+#D invalid; an anonymous union can "
-                          "only have non-static data members", elt);
+                 if (is_union)
+                   pedwarn ("%q+#D invalid; an anonymous union can "
+                            "only have non-static data members", elt);
+                 else
+                   pedwarn ("%q+#D invalid; an anonymous struct can "
+                            "only have non-static data members", elt);
                  continue;
                }
 
              if (TREE_PRIVATE (elt))
-               pedwarn ("private member %q+#D in anonymous union", elt);
+               {
+                 if (is_union)
+                   pedwarn ("private member %q+#D in anonymous union", elt);
+                 else
+                   pedwarn ("private member %q+#D in anonymous struct", elt);
+               }
              else if (TREE_PROTECTED (elt))
-               pedwarn ("protected member %q+#D in anonymous union", elt);
+               {
+                 if (is_union)
+                   pedwarn ("protected member %q+#D in anonymous union", elt);
+                 else
+                   pedwarn ("protected member %q+#D in anonymous struct", elt);
+               }
 
              TREE_PRIVATE (elt) = TREE_PRIVATE (field);
              TREE_PROTECTED (elt) = TREE_PROTECTED (field);