aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2023-01-21 23:17:02 +0200
committerVeikka Tuominen <git@vexu.eu>2023-01-22 01:04:20 +0200
commit1f475de852daddbf88e8165cdaef492e616ce3fe (patch)
tree61282a0fe27a265078700bd43679018834b3d1e8
parent5259d11e3b75b9b910fa1b0a479aedb702e256f6 (diff)
downloadzig-1f475de852daddbf88e8165cdaef492e616ce3fe.tar.gz
zig-1f475de852daddbf88e8165cdaef492e616ce3fe.zip
Sema: fix unwrapping null when reporting error on member access
Closes #14399
-rw-r--r--src/Sema.zig4
-rw-r--r--test/cases/compile_errors/bad_member_access_on_tuple.zig9
2 files changed, 11 insertions, 2 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index 8dc30ebbe5..c5cd2c9cd6 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -4643,11 +4643,11 @@ fn failWithBadMemberAccess(
.Enum => "enum",
else => unreachable,
};
- if (sema.mod.declIsRoot(agg_ty.getOwnerDecl())) {
+ if (agg_ty.getOwnerDeclOrNull()) |some| if (sema.mod.declIsRoot(some)) {
return sema.fail(block, field_src, "root struct of file '{}' has no member named '{s}'", .{
agg_ty.fmt(sema.mod), field_name,
});
- }
+ };
const msg = msg: {
const msg = try sema.errMsg(block, field_src, "{s} '{}' has no member named '{s}'", .{
kw_name, agg_ty.fmt(sema.mod), field_name,
diff --git a/test/cases/compile_errors/bad_member_access_on_tuple.zig b/test/cases/compile_errors/bad_member_access_on_tuple.zig
new file mode 100644
index 0000000000..0f91655fc0
--- /dev/null
+++ b/test/cases/compile_errors/bad_member_access_on_tuple.zig
@@ -0,0 +1,9 @@
+comptime {
+ _ = @TypeOf(.{}).is_optional;
+}
+
+// error
+// backend=stage2
+// target=native
+//
+// :2:21: error: struct '@TypeOf(.{})' has no member named 'is_optional'