utils.c (gnat_type_for_size): Set TYPE_ARTIFICIAL on created types.
authorPierre-Marie de Rodat <derodat@adacore.com>
Thu, 27 Apr 2017 09:49:49 +0000 (09:49 +0000)
committerArnaud Charlet <charlet@gcc.gnu.org>
Thu, 27 Apr 2017 09:49:49 +0000 (11:49 +0200)
2017-04-27  Pierre-Marie de Rodat  <derodat@adacore.com>

* gcc-interface/utils.c (gnat_type_for_size): Set
TYPE_ARTIFICIAL on created types.

From-SVN: r247303

gcc/ada/ChangeLog
gcc/ada/gcc-interface/utils.c

index 8bffbec10ff6f8444c9cde8488183f4b6b80e344..98c2fa9a4db374bbefb7015e03b68dd46b1638ad 100644 (file)
@@ -1,3 +1,8 @@
+2017-04-27  Pierre-Marie de Rodat  <derodat@adacore.com>
+
+       * gcc-interface/utils.c (gnat_type_for_size): Set
+        TYPE_ARTIFICIAL on created types.
+
 2017-04-27  Claire Dross  <dross@adacore.com>
 
        * a-cfdlli.adb, a-cfdlli.ads (Formal_Model): Adapt to
index 0a6d6af5b52f7e8c8c5650de4f3a383269c158b9..4549a1b64fe80f66805ba05671dcbe784661103a 100644 (file)
@@ -6,7 +6,7 @@
  *                                                                          *
  *                          C Implementation File                           *
  *                                                                          *
- *          Copyright (C) 1992-2016, Free Software Foundation, Inc.         *
+ *          Copyright (C) 1992-2017, Free Software Foundation, Inc.         *
  *                                                                          *
  * GNAT is free software;  you can  redistribute it  and/or modify it under *
  * terms of the  GNU General Public License as published  by the Free Soft- *
@@ -359,7 +359,7 @@ tree
 make_dummy_type (Entity_Id gnat_type)
 {
   Entity_Id gnat_equiv = Gigi_Equivalent_Type (Underlying_Type (gnat_type));
-  tree gnu_type;
+  tree gnu_type, debug_type;
 
   /* If there was no equivalent type (can only happen when just annotating
      types) or underlying type, go back to the original type.  */
@@ -384,6 +384,17 @@ make_dummy_type (Entity_Id gnat_type)
 
   SET_DUMMY_NODE (gnat_equiv, gnu_type);
 
+  /* Create a debug type so that debug info consumers only see an unspecified
+     type.  */
+  if (Needs_Debug_Info (gnat_type))
+    {
+      debug_type = make_node (LANG_TYPE);
+      SET_TYPE_DEBUG_TYPE (gnu_type, debug_type);
+
+      TYPE_NAME (debug_type) = TYPE_NAME (gnu_type);
+      TYPE_ARTIFICIAL (debug_type) = TYPE_ARTIFICIAL (gnu_type);
+    }
+
   return gnu_type;
 }
 
@@ -3384,6 +3395,7 @@ gnat_type_for_size (unsigned precision, int unsignedp)
     t = make_unsigned_type (precision);
   else
     t = make_signed_type (precision);
+  TYPE_ARTIFICIAL (t) = 1;
 
   if (precision <= 2 * MAX_BITS_PER_WORD)
     signed_and_unsigned_types[precision][unsignedp] = t;