c-ada-spec.c (has_static_fields): Look only into variables.
authorEric Botcazou <ebotcazou@adacore.com>
Sat, 5 Aug 2017 22:00:41 +0000 (22:00 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Sat, 5 Aug 2017 22:00:41 +0000 (22:00 +0000)
* c-ada-spec.c (has_static_fields): Look only into variables.
(print_constructor): Add TYPE parameter and use it for the name.
(print_destructor): Likewise.
(print_ada_declaration): Adjust to new constructor/destructor names.
Adjust calls to print_constructor and print_destructor.
(print_ada_struct_decl): Do not test TREE_STATIC on FIELD_DECL.
Look only into variables in the final loop.

From-SVN: r250890

gcc/c-family/ChangeLog
gcc/c-family/c-ada-spec.c

index 84ef2147d7b9ce748c144958376f29bbf52a0c47..3712c8c21d61f54cee233ff8b16174536a21f1a3 100644 (file)
@@ -1,3 +1,13 @@
+2017-08-05  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * c-ada-spec.c (has_static_fields): Look only into variables.
+       (print_constructor): Add TYPE parameter and use it for the name.
+       (print_destructor): Likewise.
+       (print_ada_declaration): Adjust to new constructor/destructor names.
+       Adjust calls to print_constructor and print_destructor.
+       (print_ada_struct_decl): Do not test TREE_STATIC on FIELD_DECL.
+       Look only into variables in the final loop.
+
 2017-08-01  Eric Botcazou  <ebotcazou@adacore.com>
 
        * c-ada-spec.c (has_static_fields): Look only into fields.
index 761e518d96571c581a44317831a005d44f64d6f1..dac437d9bf63c2165160d8edc6bd6fd4d4888dee 100644 (file)
@@ -1056,7 +1056,7 @@ has_static_fields (const_tree type)
     return false;
 
   for (tree fld = TYPE_FIELDS (type); fld; fld = TREE_CHAIN (fld))
-    if (TREE_CODE (fld) == FIELD_DECL && DECL_NAME (fld) && TREE_STATIC (fld))
+    if (TREE_CODE (fld) == VAR_DECL && DECL_NAME (fld))
       return true;
 
   return false;
@@ -2635,12 +2635,12 @@ dump_nested_type (pretty_printer *buffer, tree field, tree t, tree parent,
     }
 }
 
-/* Dump in BUFFER constructor spec corresponding to T.  */
+/* Dump in BUFFER constructor spec corresponding to T for TYPE.  */
 
 static void
-print_constructor (pretty_printer *buffer, tree t)
+print_constructor (pretty_printer *buffer, tree t, tree type)
 {
-  tree decl_name = DECL_NAME (DECL_ORIGIN (t));
+  tree decl_name = DECL_NAME (TYPE_NAME (type));
 
   pp_string (buffer, "New_");
   pp_ada_tree_identifier (buffer, decl_name, t, false);
@@ -2649,9 +2649,9 @@ print_constructor (pretty_printer *buffer, tree t)
 /* Dump in BUFFER destructor spec corresponding to T.  */
 
 static void
-print_destructor (pretty_printer *buffer, tree t)
+print_destructor (pretty_printer *buffer, tree t, tree type)
 {
-  tree decl_name = DECL_NAME (DECL_ORIGIN (t));
+  tree decl_name = DECL_NAME (TYPE_NAME (type));
 
   pp_string (buffer, "Delete_");
   pp_ada_tree_identifier (buffer, decl_name, t, false);
@@ -2907,7 +2907,8 @@ print_ada_declaration (pretty_printer *buffer, tree t, tree type, int spc)
            return 0;
 
          /* Only consider constructors/destructors for complete objects.  */
-         if (strncmp (IDENTIFIER_POINTER (decl_name), "__comp", 6) != 0)
+         if (strncmp (IDENTIFIER_POINTER (decl_name), "__ct_comp", 9) != 0
+             && strncmp (IDENTIFIER_POINTER (decl_name), "__dt_comp", 9) != 0)
            return 0;
        }
 
@@ -2935,9 +2936,9 @@ print_ada_declaration (pretty_printer *buffer, tree t, tree type, int spc)
        }
 
       if (is_constructor)
-       print_constructor (buffer, t);
+       print_constructor (buffer, t, type);
       else if (is_destructor)
-       print_destructor (buffer, t);
+       print_destructor (buffer, t, type);
       else
        dump_ada_decl_name (buffer, t, false);
 
@@ -2976,7 +2977,7 @@ print_ada_declaration (pretty_printer *buffer, tree t, tree type, int spc)
       if (is_constructor)
        {
          pp_string (buffer, "pragma CPP_Constructor (");
-         print_constructor (buffer, t);
+         print_constructor (buffer, t, type);
          pp_string (buffer, ", \"");
          pp_asm_name (buffer, t);
          pp_string (buffer, "\");");
@@ -2984,7 +2985,7 @@ print_ada_declaration (pretty_printer *buffer, tree t, tree type, int spc)
       else if (is_destructor)
        {
          pp_string (buffer, "pragma Import (CPP, ");
-         print_destructor (buffer, t);
+         print_destructor (buffer, t, type);
          pp_string (buffer, ", \"");
          pp_asm_name (buffer, t);
          pp_string (buffer, "\");");
@@ -3214,7 +3215,7 @@ print_ada_struct_decl (pretty_printer *buffer, tree node, tree type, int spc,
                  field_num++;
                }
            }
-         else if (TREE_CODE (tmp) == FIELD_DECL && !TREE_STATIC (tmp))
+         else if (TREE_CODE (tmp) == FIELD_DECL)
            {
              /* Skip internal virtual table field.  */
              if (!DECL_VIRTUAL_P (tmp))
@@ -3308,9 +3309,7 @@ print_ada_struct_decl (pretty_printer *buffer, tree node, tree type, int spc,
   /* Print the static fields of the structure, if any.  */
   for (tmp = TYPE_FIELDS (node); tmp; tmp = TREE_CHAIN (tmp))
     {
-      if (TREE_CODE (tmp) == FIELD_DECL
-         && DECL_NAME (tmp)
-         && TREE_STATIC (tmp))
+      if (TREE_CODE (tmp) == VAR_DECL && DECL_NAME (tmp))
        {
          if (need_semicolon)
            {