From: Philip Herron <herron.phi...@googlemail.com>

Array expressions are still getting turned into VIEW_CONVERT_EXPR's becuase
TYPE_MAIN_VARIANT is not set so then we might as well reuse the type-hasher
to sort this out.

Fixes Rust-GCC#3588

gcc/rust/ChangeLog:

        * backend/rust-compile-context.h: only push named types
        * backend/rust-compile-type.cc (TyTyResolveCompile::visit): run the 
type hasher

gcc/testsuite/ChangeLog:

        * rust/compile/issue-3588.rs: New test.

Signed-off-by: Philip Herron <herron.phi...@googlemail.com>
---
 gcc/rust/backend/rust-compile-context.h  | 5 ++++-
 gcc/rust/backend/rust-compile-type.cc    | 2 ++
 gcc/testsuite/rust/compile/issue-3588.rs | 5 +++++
 3 files changed, 11 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/rust/compile/issue-3588.rs

diff --git a/gcc/rust/backend/rust-compile-context.h 
b/gcc/rust/backend/rust-compile-context.h
index a44638817db..ce81a1d0db2 100644
--- a/gcc/rust/backend/rust-compile-context.h
+++ b/gcc/rust/backend/rust-compile-context.h
@@ -72,7 +72,10 @@ public:
       return it->second;
 
     compiled_type_map.insert ({h, type});
-    push_type (type);
+
+    if (TYPE_NAME (type) != NULL)
+      push_type (type);
+
     return type;
   }
 
diff --git a/gcc/rust/backend/rust-compile-type.cc 
b/gcc/rust/backend/rust-compile-type.cc
index 813e11c47cf..83e5756429f 100644
--- a/gcc/rust/backend/rust-compile-type.cc
+++ b/gcc/rust/backend/rust-compile-type.cc
@@ -481,6 +481,8 @@ TyTyResolveCompile::visit (const TyTy::ArrayType &type)
   tree folded_capacity_expr = fold_expr (capacity_expr);
 
   translated = Backend::array_type (element_type, folded_capacity_expr);
+  if (translated != error_mark_node)
+    translated = ctx->insert_compiled_type (translated);
 }
 
 void
diff --git a/gcc/testsuite/rust/compile/issue-3588.rs 
b/gcc/testsuite/rust/compile/issue-3588.rs
new file mode 100644
index 00000000000..744d9671c42
--- /dev/null
+++ b/gcc/testsuite/rust/compile/issue-3588.rs
@@ -0,0 +1,5 @@
+const FOO: i32 = if true { [1, 2, 3] } else { [2, 3, 4] }[0];
+
+pub fn test() -> i32 {
+    FOO
+}
-- 
2.49.0

Reply via email to