* gcc-interface/trans.c (Attribute_to_gnu) <Attr_Deref>: New case.
authorEric Botcazou <ebotcazou@adacore.com>
Thu, 26 Mar 2015 21:12:55 +0000 (21:12 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Thu, 26 Mar 2015 21:12:55 +0000 (21:12 +0000)
From-SVN: r221711

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

index ca430dc9da3cb3aa4d549b1101ec7fd12d6c46de..e7c67496c82015b366acccf1ee7bf950afdb074d 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 a4ba82e5dfce4917715774fc2a39ca07deeb5536..7379477215868790973dba1f6f78f5574a61d1ae 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 ();