aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/gcc-interface
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2011-04-02 08:59:45 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2011-04-02 08:59:45 +0000
commit4cb12a90e73ccb9ce365e8462ea68e6163493746 (patch)
treed5038c6b13bc19996e82bcbc51df525f54af3324 /gcc/ada/gcc-interface
parentacccc61c771bfc3f78a49805a3382626314da520 (diff)
downloadgcc-4cb12a90e73ccb9ce365e8462ea68e6163493746.zip
gcc-4cb12a90e73ccb9ce365e8462ea68e6163493746.tar.gz
gcc-4cb12a90e73ccb9ce365e8462ea68e6163493746.tar.bz2
utils.c (gnat_pushdecl): If this is a non-artificial declaration of a pointer type...
* gcc-interface/utils.c (gnat_pushdecl): If this is a non-artificial declaration of a pointer type, then set DECL_ORIGINAL_TYPE to a distinct copy. From-SVN: r171885
Diffstat (limited to 'gcc/ada/gcc-interface')
-rw-r--r--gcc/ada/gcc-interface/utils.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/gcc/ada/gcc-interface/utils.c b/gcc/ada/gcc-interface/utils.c
index 6472a0c..bd6badd 100644
--- a/gcc/ada/gcc-interface/utils.c
+++ b/gcc/ada/gcc-interface/utils.c
@@ -560,12 +560,16 @@ gnat_pushdecl (tree decl, Node_Id gnat_node)
if (!(TYPE_NAME (t) && TREE_CODE (TYPE_NAME (t)) == TYPE_DECL))
{
- /* Array types aren't tagged types in the C sense so we force the
+ /* Array and pointer types aren't "tagged" types so we force the
type to be associated with its typedef in the DWARF back-end,
in order to make sure that the latter is always preserved. */
- if (!DECL_ARTIFICIAL (decl) && TREE_CODE (t) == ARRAY_TYPE)
+ if (!DECL_ARTIFICIAL (decl)
+ && (TREE_CODE (t) == ARRAY_TYPE
+ || TREE_CODE (t) == POINTER_TYPE))
{
tree tt = build_distinct_type_copy (t);
+ if (TREE_CODE (t) == POINTER_TYPE)
+ TYPE_NEXT_PTR_TO (t) = tt;
TYPE_NAME (tt) = DECL_NAME (decl);
TYPE_STUB_DECL (tt) = TYPE_STUB_DECL (t);
DECL_ORIGINAL_TYPE (decl) = tt;