aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@gcc.gnu.org>2020-05-09 22:38:29 +0200
committerEric Botcazou <ebotcazou@gcc.gnu.org>2020-05-09 22:38:29 +0200
commitaff220748ca669d4338c5ac6f0b210a29f90bbab (patch)
tree6bad7915bea2297a161fbc444d3203f3764fd8a4
parentb9364a56d107083858267a52f162391d8cabb2f7 (diff)
downloadgcc-aff220748ca669d4338c5ac6f0b210a29f90bbab.zip
gcc-aff220748ca669d4338c5ac6f0b210a29f90bbab.tar.gz
gcc-aff220748ca669d4338c5ac6f0b210a29f90bbab.tar.bz2
Fix problematic cases of wrapping
* gcc-interface/trans.c (gnat_to_gnu): Do not wrap boolean values if they appear in any kind of attribute references.
-rw-r--r--gcc/ada/ChangeLog5
-rw-r--r--gcc/ada/gcc-interface/trans.c5
2 files changed, 8 insertions, 2 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 6aec0ee..814e550 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,5 +1,10 @@
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
with qualified "others" aggregates in the memset case.
diff --git a/gcc/ada/gcc-interface/trans.c b/gcc/ada/gcc-interface/trans.c
index 5de04ab..44b156a 100644
--- a/gcc/ada/gcc-interface/trans.c
+++ b/gcc/ada/gcc-interface/trans.c
@@ -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,