aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2015-03-26 21:12:55 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2015-03-26 21:12:55 +0000
commit06d750319f4c0c85748f175b380affc344d0defe (patch)
tree83fedfd1e08b07fa39b7ccbba53fdb05029491d3 /gcc
parentf809d2138c7ab3656f12eb4deb3bf9191f1e12c3 (diff)
downloadgcc-06d750319f4c0c85748f175b380affc344d0defe.zip
gcc-06d750319f4c0c85748f175b380affc344d0defe.tar.gz
gcc-06d750319f4c0c85748f175b380affc344d0defe.tar.bz2
* gcc-interface/trans.c (Attribute_to_gnu) <Attr_Deref>: New case.
From-SVN: r221711
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/ChangeLog4
-rw-r--r--gcc/ada/gcc-interface/trans.c12
2 files changed, 16 insertions, 0 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index ca430dc..e7c6749 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,7 @@
+2015-03-26 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc-interface/trans.c (Attribute_to_gnu) <Attr_Deref>: New case.
+
2015-03-24 Gary Dismukes <dismukes@adacore.com>
* sem_ch3.adb: Minor typo fix (missing paren).
diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c
index a4ba82e..7379477 100644
--- a/gcc/ada/gcc-interface/trans.c
+++ b/gcc/ada/gcc-interface/trans.c
@@ -2469,6 +2469,18 @@ Attribute_to_gnu (Node_Id gnat_node, tree *gnu_result_type_p, int attribute)
}
break;
+ case Attr_Deref:
+ prefix_unused = true;
+ gnu_expr = gnat_to_gnu (First (Expressions (gnat_node)));
+ gnu_result_type = get_unpadded_type (Etype (gnat_node));
+ /* This can be a random address so build an alias-all pointer type. */
+ gnu_expr
+ = convert (build_pointer_type_for_mode (gnu_result_type, ptr_mode,
+ true),
+ gnu_expr);
+ gnu_result = build_unary_op (INDIRECT_REF, NULL_TREE, gnu_expr);
+ break;
+
default:
/* This abort means that we have an unimplemented attribute. */
gcc_unreachable ();