aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2026-08-25 13:31:38 +0200
committerEugen Wissner <belka@caraus.de>2026-08-25 13:31:38 +0200
commitdf51f9c4ee0ee4ac22206513bcd60e6928b7eaeb (patch)
tree3dcb6d17869e56dfb5ca33027b904d9ee72e6263
parent7d0d0eb69589ab8e0c8b036a3b642593a372b041 (diff)
downloadelna-df51f9c4ee0ee4ac22206513bcd60e6928b7eaeb.tar.gz
Fix compatible procedure cast
-rw-r--r--gcc/gcc/elna-generic.cc1
-rw-r--r--testsuite/runnable/procedure_cast.elna9
2 files changed, 10 insertions, 0 deletions
diff --git a/gcc/gcc/elna-generic.cc b/gcc/gcc/elna-generic.cc
index b657e92..659a8c1 100644
--- a/gcc/gcc/elna-generic.cc
+++ b/gcc/gcc/elna-generic.cc
@@ -130,6 +130,7 @@ namespace elna::gcc
tree cast_target = get_inner_alias(expression->type_decoration, this->symbols);
expression->value().accept(this);
+ this->current_expression = prepare_rvalue(this->current_expression);
const location_t cast_location = get_location(&expression->position());
auto source_slice = resolve_underlying_type(expression->value().type_decoration)
.get<boot::slice_type>();
diff --git a/testsuite/runnable/procedure_cast.elna b/testsuite/runnable/procedure_cast.elna
new file mode 100644
index 0000000..27977e1
--- /dev/null
+++ b/testsuite/runnable/procedure_cast.elna
@@ -0,0 +1,9 @@
+var cb: proc(x: ^Char): Int
+
+proc probe_int(x: ^Int): Int
+return 42
+
+begin
+ cb := cast(probe_int: proc(x: ^Char): Int);
+ assert(cb(nil) = 42)
+end.