Fix problematic cases of wrapping
authorEric Botcazou <ebotcazou@gcc.gnu.org>
Sat, 9 May 2020 20:38:29 +0000 (22:38 +0200)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Sat, 9 May 2020 20:38:29 +0000 (22:38 +0200)
* gcc-interface/trans.c (gnat_to_gnu): Do not wrap boolean values
if they appear in any kind of attribute references.

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

index 6aec0eeede1206eced2f7e1e6b5e99ab20f96377..814e5507e4809f3f168ef4614cdbc347d1a0ae7b 100644 (file)
@@ -1,3 +1,8 @@
+2020-05-09  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gcc-interface/trans.c (gnat_to_gnu): Do not wrap boolean values if
+       they appear in any kind of attribute references.
+
 2020-05-09  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gcc-interface/trans.c (gnat_to_gnu) <N_Assignment_Statement>: Deal
index 5de04abb97fab5fb6a598ce78222781ea1a9e597..44b156ac3d8c8bbb3992b00ba2fa82849f8e9c9f 100644 (file)
@@ -8695,8 +8695,9 @@ gnat_to_gnu (Node_Id gnat_node)
          || kind == N_Indexed_Component
          || kind == N_Selected_Component)
       && TREE_CODE (get_base_type (gnu_result_type)) == BOOLEAN_TYPE
-      && !lvalue_required_p (gnat_node, gnu_result_type, false, false)
-      && Nkind (Parent (gnat_node)) != N_Variant_Part)
+      && Nkind (Parent (gnat_node)) != N_Attribute_Reference
+      && Nkind (Parent (gnat_node)) != N_Variant_Part
+      && !lvalue_required_p (gnat_node, gnu_result_type, false, false))
     {
       gnu_result
        = build_binary_op (NE_EXPR, gnu_result_type,