aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2022-12-18 00:45:07 +0200
committerVeikka Tuominen <git@vexu.eu>2022-12-19 12:19:25 +0200
commit0eddf0cbc0a88121a67239d5899dca8a39c39cd8 (patch)
tree3d271460ab2998ba842e350022523fe73929f4a7
parent3db8cffa3b383011471f425983a7e98ad8a46aa5 (diff)
downloadzig-0eddf0cbc0a88121a67239d5899dca8a39c39cd8.tar.gz
zig-0eddf0cbc0a88121a67239d5899dca8a39c39cd8.zip
Sema: fix condition for non-pointer noalias error
Closes #13987
-rw-r--r--src/Sema.zig4
-rw-r--r--test/cases/compile_errors/noalias_on_non_pointer_param.zig6
2 files changed, 9 insertions, 1 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index ede4eaf0e7..e8ed010a7c 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -8820,7 +8820,9 @@ fn analyzeParameter(
};
return sema.failWithOwnedErrorMsg(msg);
}
- if (!this_generic and is_noalias and !param.ty.isPtrAtRuntime()) {
+ if (!sema.is_generic_instantiation and !this_generic and is_noalias and
+ !(param.ty.zigTypeTag() == .Pointer or param.ty.isPtrLikeOptional()))
+ {
return sema.fail(block, param_src, "non-pointer parameter declared noalias", .{});
}
}
diff --git a/test/cases/compile_errors/noalias_on_non_pointer_param.zig b/test/cases/compile_errors/noalias_on_non_pointer_param.zig
index f637013c93..806808820f 100644
--- a/test/cases/compile_errors/noalias_on_non_pointer_param.zig
+++ b/test/cases/compile_errors/noalias_on_non_pointer_param.zig
@@ -1,6 +1,12 @@
fn f(noalias x: i32) void { _ = x; }
export fn entry() void { f(1234); }
+fn generic(comptime T: type, noalias _: [*]T, noalias _: [*]const T, _: usize) void {}
+comptime { _ = generic; }
+
+fn slice(noalias _: []u8) void {}
+comptime { _ = slice; }
+
// error
// backend=stage2
// target=native