aboutsummaryrefslogtreecommitdiff
path: root/src/Sema.zig
diff options
context:
space:
mode:
authorAlex Rønne Petersen <alex@alexrp.com>2024-11-03 14:27:09 +0100
committerGitHub <noreply@github.com>2024-11-03 14:27:09 +0100
commit3054486d1dedd49553680da2c074d1ab413797fd (patch)
tree79c3d4e9b417d14ddb11a47e26da083d5e06e8aa /src/Sema.zig
parent2f003f39b28176f08de51271eb66b5f3a54c7aae (diff)
parente4e3d7ab4140ae6f078d3ffd72fce4c0a5e6e59f (diff)
downloadzig-3054486d1dedd49553680da2c074d1ab413797fd.tar.gz
zig-3054486d1dedd49553680da2c074d1ab413797fd.zip
Merge pull request #21843 from alexrp/callconv-followup
Some follow-up work for #21697
Diffstat (limited to 'src/Sema.zig')
-rw-r--r--src/Sema.zig33
1 files changed, 30 insertions, 3 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index 46fe7f0a31..65805b6a67 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -7574,13 +7574,13 @@ fn analyzeCall(
if (try sema.resolveValue(func)) |func_val|
if (func_val.isUndef(zcu))
return sema.failWithUseOfUndef(block, call_src);
- if (cc == .naked) {
+ if (!callConvIsCallable(cc)) {
const maybe_func_inst = try sema.funcDeclSrcInst(func);
const msg = msg: {
const msg = try sema.errMsg(
func_src,
- "unable to call function with naked calling convention",
- .{},
+ "unable to call function with calling convention '{s}'",
+ .{@tagName(cc)},
);
errdefer msg.destroy(sema.gpa);
@@ -9764,6 +9764,33 @@ fn checkCallConvSupportsVarArgs(sema: *Sema, block: *Block, src: LazySrcLoc, cc:
}
}
+fn callConvIsCallable(cc: std.builtin.CallingConvention.Tag) bool {
+ return switch (cc) {
+ .naked,
+
+ .arm_interrupt,
+ .avr_interrupt,
+ .avr_signal,
+ .csky_interrupt,
+ .m68k_interrupt,
+ .mips_interrupt,
+ .mips64_interrupt,
+ .riscv32_interrupt,
+ .riscv64_interrupt,
+ .x86_interrupt,
+ .x86_64_interrupt,
+
+ .amdgcn_kernel,
+ .nvptx_kernel,
+ .spirv_kernel,
+ .spirv_fragment,
+ .spirv_vertex,
+ => false,
+
+ else => true,
+ };
+}
+
fn checkMergeAllowed(sema: *Sema, block: *Block, src: LazySrcLoc, peer_ty: Type) !void {
const pt = sema.pt;
const zcu = pt.zcu;