diff options
author | Thomas Voss <mail@thomasvoss.com> | 2024-07-09 16:29:22 +0200 |
---|---|---|
committer | Thomas Voss <mail@thomasvoss.com> | 2024-07-09 16:29:22 +0200 |
commit | 83f6043dc8ba291ba6d406f9ba0d98abf053e03a (patch) | |
tree | c51065896a02ed6f7a79c8dc8fc61fcc322838a6 | |
parent | 6ec0392311952ab4a2d621f39cc082bcc2f5bf9e (diff) |
Add tests for static locals
-rw-r--r-- | test/data/static.ll | 33 | ||||
-rw-r--r-- | test/data/static.yx | 26 |
2 files changed, 59 insertions, 0 deletions
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; +} |