[COMMITTED] algol68: consolidate ref in a68_union_value

Jose E. Marchesi jemarch@gnu.org
Tue Apr 22 22:26:51 GMT 2025


---
 gcc/algol68/a68-low-unions.cc               | 2 +-
 gcc/testsuite/algol68/compile/uniting-1.a68 | 9 +++++++++
 2 files changed, 10 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/algol68/compile/uniting-1.a68

diff --git a/gcc/algol68/a68-low-unions.cc b/gcc/algol68/a68-low-unions.cc
index 67ba85ba8ea..e80b774abec 100644
--- a/gcc/algol68/a68-low-unions.cc
+++ b/gcc/algol68/a68-low-unions.cc
@@ -213,7 +213,7 @@ a68_union_value (MOID_T *mode, tree exp, MOID_T *exp_mode)
   tree value = build_constructor_va (TREE_TYPE (value_field),
 				     1,
 				     alternative_field,
-				     exp);
+				     a68_consolidate_ref (exp_mode, exp));
   return build_constructor_va (type,
 			       2,
 			       overhead_field, overhead,
diff --git a/gcc/testsuite/algol68/compile/uniting-1.a68 b/gcc/testsuite/algol68/compile/uniting-1.a68
new file mode 100644
index 00000000000..e1fcd6fccff
--- /dev/null
+++ b/gcc/testsuite/algol68/compile/uniting-1.a68
@@ -0,0 +1,9 @@
+# { dg-options {-fstropping=supper} }  #
+# PR SUPPER  #
+begin mode JSON_Val = union (int,ref JSON_Obj),
+           JSON_Obj = struct (int je),
+
+      proc json_new_obj = JSON_Val:
+         (JSON_Obj o; o);
+      skip
+end
-- 
2.30.2



More information about the Algol68 mailing list