From 83f6043dc8ba291ba6d406f9ba0d98abf053e03a Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Tue, 9 Jul 2024 16:29:22 +0200 Subject: Add tests for static locals --- test/data/static.ll | 33 +++++++++++++++++++++++++++++++++ test/data/static.yx | 26 ++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 test/data/static.ll create mode 100644 test/data/static.yx diff --git a/test/data/static.ll b/test/data/static.ll new file mode 100644 index 0000000..8327280 --- /dev/null +++ b/test/data/static.ll @@ -0,0 +1,33 @@ +@x = internal global i64 0 +@foo.bar = internal global i64 42 +@foo.baz = internal global float 0.000000e+00 +@bar.x = internal global i128 1000 +@baz.nested.x = internal global i16 0 +@baz.x = internal global i128 1000 +@baz.y = internal global i64 42 + +define void @foo() { +entry: + %load = load i64, ptr @foo.bar, align 8 + %mul = mul i64 %load, 2 + store i64 %mul, ptr @foo.bar, align 8 + ret void +} + +define i128 @bar() { +entry: + %load = load i128, ptr @bar.x, align 16 + ret i128 %load +} + +define void @baz.nested() { +entry: + store i16 16, ptr @baz.nested.x, align 2 + ret void +} + +define i128 @baz() { +entry: + %load = load i128, ptr @baz.x, align 16 + ret i128 %load +} diff --git a/test/data/static.yx b/test/data/static.yx new file mode 100644 index 0000000..8f39a6e --- /dev/null +++ b/test/data/static.yx @@ -0,0 +1,26 @@ +x: int; + +/* You can define static local variables and use them */ +foo :: () { + static bar := 42; + static baz: f32; + + bar = bar * 2; +} + +/* Static locals can shadow other globals */ +bar :: () u128 { + static x: u128 = 1'000; + return x; +} + +/* Shadowing works in nested functions */ +baz :: () u128 { + static x: u128 = 1'000; + static y := 42; + nested :: () { + static x: i16; + x = 16; + } + return x; +} -- cgit v1.2.3