decl.c (gnat_to_gnu_entity): Robustify test for types descendant of System.Address.
authorEric Botcazou <ebotcazou@adacore.com>
Wed, 13 Dec 2017 09:05:07 +0000 (09:05 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Wed, 13 Dec 2017 09:05:07 +0000 (09:05 +0000)
* gcc-interface/decl.c (gnat_to_gnu_entity): Robustify test for types
descendant of System.Address.
(gnat_to_gnu_subprog_type): Likewise.

From-SVN: r255599

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

index c676e7b877f9dbab0d457d0166fe3e2b73395a19..70c596efbaef6eb57642c9de057df9c1a20e53d9 100644 (file)
@@ -1,3 +1,9 @@
+2017-12-13  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gcc-interface/decl.c (gnat_to_gnu_entity): Robustify test for types
+       descendant of System.Address.
+       (gnat_to_gnu_subprog_type): Likewise.
+
 2017-12-08  Jakub Jelinek  <jakub@redhat.com>
 
        * gcc-interface/utils.c (gnat_internal_attribute_table): Add
index 77515c0bcd2f3be48779a920fb946f7f748061c8..f626e6186d23f1a69be7cc98f749c0d3b024d79e 100644 (file)
@@ -659,7 +659,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
 
        /* Get the type after elaborating the renamed object.  */
        if (Has_Foreign_Convention (gnat_entity)
-           && Is_Descendant_Of_Address (gnat_type))
+           && Is_Descendant_Of_Address (Underlying_Type (gnat_type)))
          gnu_type = ptr_type_node;
        else
          {
@@ -5594,7 +5594,7 @@ gnat_to_gnu_subprog_type (Entity_Id gnat_subprog, bool definition,
       /* For foreign convention subprograms, return System.Address as void *
         or equivalent.  Note that this comprises GCC builtins.  */
       if (Has_Foreign_Convention (gnat_subprog)
-         && Is_Descendant_Of_Address (gnat_return_type))
+         && Is_Descendant_Of_Address (Underlying_Type (gnat_return_type)))
        gnu_return_type = ptr_type_node;
       else
        gnu_return_type = gnat_to_gnu_profile_type (gnat_return_type);
@@ -5761,7 +5761,7 @@ gnat_to_gnu_subprog_type (Entity_Id gnat_subprog, bool definition,
          /* For foreign convention subprograms, pass System.Address as void *
             or equivalent.  Note that this comprises GCC builtins.  */
          if (Has_Foreign_Convention (gnat_subprog)
-             && Is_Descendant_Of_Address (gnat_param_type))
+             && Is_Descendant_Of_Address (Underlying_Type (gnat_param_type)))
            gnu_param_type = ptr_type_node;
          else
            gnu_param_type = gnat_to_gnu_profile_type (gnat_param_type);