* gcc-interface/trans.c (Attribute_to_gnu) <Attr_Deref>: New case.
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 26 Mar 2015 21:12:55 +0000 (21:12 +0000)
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 26 Mar 2015 21:12:55 +0000 (21:12 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@221711 138bc75d-0d04-0410-961f-82ee72b054a4

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

index ca430dc..e7c6749 100644 (file)
@@ -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).
index a4ba82e..7379477 100644 (file)
@@ -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 ();