aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2022-09-23 12:00:02 +0300
committerVeikka Tuominen <git@vexu.eu>2022-09-23 17:39:06 +0300
commit8d1fdfc8ede94b1aea524041c1df10c42d4002e4 (patch)
treecb57b64f9eb88c2352bc488a6c6ae2ec0b3242bc /test
parentcae76d8293f6416ff698171c2ae10552fa014587 (diff)
downloadzig-8d1fdfc8ede94b1aea524041c1df10c42d4002e4.tar.gz
zig-8d1fdfc8ede94b1aea524041c1df10c42d4002e4.zip
Sema: preserve volatileness when constructing field pointers
Closes #12928
Diffstat (limited to 'test')
-rw-r--r--test/behavior.zig1
-rw-r--r--test/behavior/bugs/12928.zig26
2 files changed, 27 insertions, 0 deletions
diff --git a/test/behavior.zig b/test/behavior.zig
index 2f1c609a55..552e68f1f7 100644
--- a/test/behavior.zig
+++ b/test/behavior.zig
@@ -93,6 +93,7 @@ test {
_ = @import("behavior/bugs/12794.zig");
_ = @import("behavior/bugs/12801-1.zig");
_ = @import("behavior/bugs/12801-2.zig");
+ _ = @import("behavior/bugs/12928.zig");
_ = @import("behavior/byteswap.zig");
_ = @import("behavior/byval_arg_var.zig");
_ = @import("behavior/call.zig");
diff --git a/test/behavior/bugs/12928.zig b/test/behavior/bugs/12928.zig
new file mode 100644
index 0000000000..56eca8cf60
--- /dev/null
+++ b/test/behavior/bugs/12928.zig
@@ -0,0 +1,26 @@
+const std = @import("std");
+const expect = std.testing.expect;
+const A = extern struct {
+ value: *volatile B,
+};
+const B = extern struct {
+ a: u32,
+ b: i32,
+};
+test {
+ var a: *A = undefined;
+ try expect(@TypeOf(&a.value.a) == *volatile u32);
+ try expect(@TypeOf(&a.value.b) == *volatile i32);
+}
+const C = extern struct {
+ value: *volatile D,
+};
+const D = extern union {
+ a: u32,
+ b: i32,
+};
+test {
+ var c: *C = undefined;
+ try expect(@TypeOf(&c.value.a) == *volatile u32);
+ try expect(@TypeOf(&c.value.b) == *volatile i32);
+}