OSDN Git Service

* gcc-interface/trans.c (lvalue_required_p) <N_Unchecked_Conversion>:
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 5 Nov 2009 18:25:10 +0000 (18:25 +0000)
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 5 Nov 2009 18:25:10 +0000 (18:25 +0000)
New case.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@153948 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 4dc4187..42ad20e 100644 (file)
@@ -1,3 +1,8 @@
+2009-11-05  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gcc-interface/trans.c (lvalue_required_p) <N_Unchecked_Conversion>:
+       New case.
+
 2009-10-30  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gcc-interface/utils.c (MAX_FIXED_MODE_SIZE): Delete.
index 58afbfd..41be8bb 100644 (file)
@@ -657,17 +657,16 @@ gigi (Node_Id gnat_root, int max_gnat_node, int number_name,
   error_gnat_node = Empty;
 }
 \f
-/* Return a positive value if an lvalue is required for GNAT_NODE.
-   GNU_TYPE is the type that will be used for GNAT_NODE in the
-   translated GNU tree.  CONSTANT indicates whether the underlying
-   object represented by GNAT_NODE is constant in the Ada sense,
-   ALIASED whether it is aliased (but the latter doesn't affect
-   the outcome if CONSTANT is not true).
-
-   The function climbs up the GNAT tree starting from the node and
-   returns 1 upon encountering a node that effectively requires an
-   lvalue downstream.  It returns int instead of bool to facilitate
-   usage in non purely binary logic contexts.  */
+/* Return a positive value if an lvalue is required for GNAT_NODE.  GNU_TYPE
+   is the type that will be used for GNAT_NODE in the translated GNU tree.
+   CONSTANT indicates whether the underlying object represented by GNAT_NODE
+   is constant in the Ada sense, ALIASED whether it is aliased (but the latter
+   doesn't affect the outcome if CONSTANT is not true).
+
+   The function climbs up the GNAT tree starting from the node and returns 1
+   upon encountering a node that effectively requires an lvalue downstream.
+   It returns int instead of bool to facilitate usage in non-purely binary
+   logic contexts.  */
 
 static int
 lvalue_required_p (Node_Id gnat_node, tree gnu_type, bool constant,
@@ -754,6 +753,13 @@ lvalue_required_p (Node_Id gnat_node, tree gnu_type, bool constant,
              || (Is_Composite_Type (Underlying_Type (Etype (gnat_node)))
                  && Is_Atomic (Entity (Name (gnat_parent)))));
 
+    case N_Unchecked_Type_Conversion:
+      /* Returning 0 is very likely correct but we get better code if we
+        go through the conversion.  */
+      return lvalue_required_p (gnat_parent,
+                               get_unpadded_type (Etype (gnat_parent)),
+                               constant, aliased);
+
     default:
       return 0;
     }