From dd8bbf05246c73b361605ec775b38fce3547507b Mon Sep 17 00:00:00 2001 From: Rua Date: Wed, 25 Mar 2026 19:32:40 +0100 Subject: [PATCH] transpile: Handle `InitList` correctly for all scalar types --- c2rust-transpile/src/c_ast/mod.rs | 4 ++++ c2rust-transpile/src/translator/literals.rs | 10 +--------- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/c2rust-transpile/src/c_ast/mod.rs b/c2rust-transpile/src/c_ast/mod.rs index c01937bf6c..d1471cbf28 100644 --- a/c2rust-transpile/src/c_ast/mod.rs +++ b/c2rust-transpile/src/c_ast/mod.rs @@ -2679,6 +2679,10 @@ impl CTypeKind { matches!(self, Float | Double | LongDouble | Half | BFloat16) } + pub fn is_scalar(&self) -> bool { + self.is_integral_type() || self.is_floating_type() || self.is_enum() || self.is_pointer() + } + pub fn as_underlying_decl(&self) -> Option { use CTypeKind::*; match *self { diff --git a/c2rust-transpile/src/translator/literals.rs b/c2rust-transpile/src/translator/literals.rs index 256b225de6..70baabe841 100644 --- a/c2rust-transpile/src/translator/literals.rs +++ b/c2rust-transpile/src/translator/literals.rs @@ -247,18 +247,10 @@ impl<'c> Translation<'c> { CTypeKind::Union(union_id) => { self.convert_union_literal(ctx, union_id, ids.as_ref(), ty, opt_union_field_id) } - CTypeKind::Pointer(_) => { - let id = ids.first().unwrap(); - self.convert_expr(ctx.used(), *id, None) - } - CTypeKind::Enum(_) => { - let id = ids.first().unwrap(); - self.convert_expr(ctx.used(), *id, None) - } CTypeKind::Vector(CQualTypeId { ctype, .. }, len) => { self.vector_list_initializer(ctx, ids, ctype, len) } - ref kind if kind.is_integral_type() => { + ref kind if kind.is_scalar() => { let id = ids.first().unwrap(); self.convert_expr(ctx.used(), *id, None) }