public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc/devel/rust/master] constexpr: Add `rust_sorry_at` in places relying on init values
@ 2022-10-27  7:49 Thomas Schwinge
  0 siblings, 0 replies; only message in thread
From: Thomas Schwinge @ 2022-10-27  7:49 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:b664c8bfd0917ed34ed9d3f15f3f1823200e3e4f

commit b664c8bfd0917ed34ed9d3f15f3f1823200e3e4f
Author: Arthur Cohen <arthur.cohen@embecosm.com>
Date:   Mon Oct 24 13:20:41 2022 +0200

    constexpr: Add `rust_sorry_at` in places relying on init values
    
    This also comments out a now unused function

Diff:
---
 gcc/rust/backend/rust-constexpr.cc | 96 +++++++++++++++++++-------------------
 1 file changed, 49 insertions(+), 47 deletions(-)

diff --git a/gcc/rust/backend/rust-constexpr.cc b/gcc/rust/backend/rust-constexpr.cc
index 790a8e966a0..21e8bed99b0 100644
--- a/gcc/rust/backend/rust-constexpr.cc
+++ b/gcc/rust/backend/rust-constexpr.cc
@@ -3658,49 +3658,48 @@ eval_call_expression (const constexpr_ctx *ctx, tree t, bool lval,
    whose constructor we are processing.  Add the initializer to the vector
    and return true to indicate success.  */
 
-static bool
-build_anon_member_initialization (tree member, tree init,
-				  vec<constructor_elt, va_gc> **vec_outer)
-{
-  /* MEMBER presents the relevant fields from the inside out, but we need
-     to build up the initializer from the outside in so that we can reuse
-     previously built CONSTRUCTORs if this is, say, the second field in an
-     anonymous struct.  So we use a vec as a stack.  */
-  auto_vec<tree, 2> fields;
-  do
-    {
-      fields.safe_push (TREE_OPERAND (member, 1));
-      member = TREE_OPERAND (member, 0);
-    }
-  while (ANON_AGGR_TYPE_P (TREE_TYPE (member))
-	 && TREE_CODE (member) == COMPONENT_REF);
-
-  /* VEC has the constructor elements vector for the context of FIELD.
-     If FIELD is an anonymous aggregate, we will push inside it.  */
-  vec<constructor_elt, va_gc> **vec = vec_outer;
-  tree field;
-  while (field = fields.pop (), ANON_AGGR_TYPE_P (TREE_TYPE (field)))
-    {
-      tree ctor;
-      /* If there is already an outer constructor entry for the anonymous
-	 aggregate FIELD, use it; otherwise, insert one.  */
-      if (vec_safe_is_empty (*vec) || (*vec)->last ().index != field)
-	{
-	  ctor = build_constructor (TREE_TYPE (field), NULL);
-	  CONSTRUCTOR_APPEND_ELT (*vec, field, ctor);
-	}
-      else
-	ctor = (*vec)->last ().value;
-      vec = &CONSTRUCTOR_ELTS (ctor);
-    }
-
-  /* Now we're at the innermost field, the one that isn't an anonymous
-     aggregate.  Add its initializer to the CONSTRUCTOR and we're done.  */
-  gcc_assert (fields.is_empty ());
-  CONSTRUCTOR_APPEND_ELT (*vec, field, init);
-
-  return true;
-}
+// static bool
+// build_anon_member_initialization (tree member, tree init,
+// 				  vec<constructor_elt, va_gc> **vec_outer)
+// {
+//   /* MEMBER presents the relevant fields from the inside out, but we need
+//      to build up the initializer from the outside in so that we can reuse
+//      previously built CONSTRUCTORs if this is, say, the second field in an
+//      anonymous struct.  So we use a vec as a stack.  */
+//   auto_vec<tree, 2> fields;
+//   do
+//     {
+//       fields.safe_push (TREE_OPERAND (member, 1));
+//       member = TREE_OPERAND (member, 0);
+//   } while (ANON_AGGR_TYPE_P (TREE_TYPE (member))
+// 	   && TREE_CODE (member) == COMPONENT_REF);
+//
+//   /* VEC has the constructor elements vector for the context of FIELD.
+//      If FIELD is an anonymous aggregate, we will push inside it.  */
+//   vec<constructor_elt, va_gc> **vec = vec_outer;
+//   tree field;
+//   while (field = fields.pop (), ANON_AGGR_TYPE_P (TREE_TYPE (field)))
+//     {
+//       tree ctor;
+//       /* If there is already an outer constructor entry for the anonymous
+// 	 aggregate FIELD, use it; otherwise, insert one.  */
+//       if (vec_safe_is_empty (*vec) || (*vec)->last ().index != field)
+// 	{
+// 	  ctor = build_constructor (TREE_TYPE (field), NULL);
+// 	  CONSTRUCTOR_APPEND_ELT (*vec, field, ctor);
+// 	}
+//       else
+// 	ctor = (*vec)->last ().value;
+//       vec = &CONSTRUCTOR_ELTS (ctor);
+//     }
+//
+//   /* Now we're at the innermost field, the one that isn't an anonymous
+//      aggregate.  Add its initializer to the CONSTRUCTOR and we're done.  */
+//   gcc_assert (fields.is_empty ());
+//   CONSTRUCTOR_APPEND_ELT (*vec, field, init);
+//
+//   return true;
+// }
 
 ///* V is a vector of constructor elements built up for the base and member
 //   initializers of a constructor for TYPE.  They need to be in increasing
@@ -3750,7 +3749,7 @@ build_anon_member_initialization (tree member, tree init,
 static bool
 build_data_member_initialization (tree t, vec<constructor_elt, va_gc> **vec)
 {
-  tree member, init;
+  tree member;
   if (TREE_CODE (t) == CLEANUP_POINT_EXPR)
     t = TREE_OPERAND (t, 0);
   if (TREE_CODE (t) == EXPR_STMT)
@@ -3835,7 +3834,8 @@ build_data_member_initialization (tree t, vec<constructor_elt, va_gc> **vec)
 	member = TREE_OPERAND (member, 1);
       else if (ANON_AGGR_TYPE_P (TREE_TYPE (aggr)))
 	/* Initializing a member of an anonymous union.  */
-	return build_anon_member_initialization (member, init, vec);
+	rust_sorry_at (Location (), "cannot handle value initialization yet");
+      // return build_anon_member_initialization (member, init, vec);
       else
 	/* We're initializing a vtable pointer in a base.  Leave it as
 	   COMPONENT_REF so we remember the path to get to the vfield.  */
@@ -3845,9 +3845,11 @@ build_data_member_initialization (tree t, vec<constructor_elt, va_gc> **vec)
   /* Value-initialization can produce multiple initializers for the
      same field; use the last one.  */
   if (!vec_safe_is_empty (*vec) && (*vec)->last ().index == member)
-    (*vec)->last ().value = init;
+    rust_sorry_at (Location (), "cannot handle value initialization yet");
+  // (*vec)->last ().value = init;
   else
-    CONSTRUCTOR_APPEND_ELT (*vec, member, init);
+    rust_sorry_at (Location (), "cannot handle value initialization yet");
+  // CONSTRUCTOR_APPEND_ELT (*vec, member, init);
   return true;
 }

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-10-27  7:49 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-27  7:49 [gcc/devel/rust/master] constexpr: Add `rust_sorry_at` in places relying on init values Thomas Schwinge

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).