diff options
5 files changed, 23 insertions, 17 deletions
diff --git a/src/Sema.zig b/src/Sema.zig index 74e40687f1..6fcff1fec8 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -2257,6 +2257,9 @@ fn failWithOwnedErrorMsg(sema: *Sema, err_msg: *Module.ErrorMsg) CompileError { sema.owner_decl.analysis = .sema_failure; sema.owner_decl.generation = mod.generation; } + if (sema.func) |func| { + func.state = .sema_failure; + } const gop = mod.failed_decls.getOrPutAssumeCapacity(sema.owner_decl_index); if (gop.found_existing) { // If there are multiple errors for the same Decl, prefer the first one added. @@ -6385,6 +6388,7 @@ fn analyzeCall( }), else => unreachable, }; + if (!is_comptime_call and module_fn.state == .sema_failure) return error.AnalysisFail; // Analyze the ZIR. The same ZIR gets analyzed into a runtime function // or an inlined call depending on what union tag the `label` field is diff --git a/test/cases/compile_errors/missing_main_fn_in_executable.zig b/test/cases/compile_errors/missing_main_fn_in_executable.zig new file mode 100644 index 0000000000..2d608ad2b8 --- /dev/null +++ b/test/cases/compile_errors/missing_main_fn_in_executable.zig @@ -0,0 +1,9 @@ + + +// error +// backend=llvm +// target=x86_64-linux +// output_mode=Exe +// +// :?:?: error: root struct of file 'tmp' has no member named 'main' +// :?:?: note: called from here diff --git a/test/cases/compile_errors/private_main_fn.zig b/test/cases/compile_errors/private_main_fn.zig new file mode 100644 index 0000000000..26ad3d22db --- /dev/null +++ b/test/cases/compile_errors/private_main_fn.zig @@ -0,0 +1,10 @@ +fn main() void {} + +// error +// backend=llvm +// target=x86_64-linux +// output_mode=Exe +// +// :?:?: error: 'main' is not marked 'pub' +// :1:1: note: declared here +// :?:?: note: called from here diff --git a/test/cases/compile_errors/stage1/exe/missing_main_fn_in_executable.zig b/test/cases/compile_errors/stage1/exe/missing_main_fn_in_executable.zig deleted file mode 100644 index 65813abac3..0000000000 --- a/test/cases/compile_errors/stage1/exe/missing_main_fn_in_executable.zig +++ /dev/null @@ -1,8 +0,0 @@ - - -// error -// backend=stage1 -// target=native -// output_mode=Exe -// -// error: root source file has no member called 'main' diff --git a/test/cases/compile_errors/stage1/exe/private_main_fn.zig b/test/cases/compile_errors/stage1/exe/private_main_fn.zig deleted file mode 100644 index 5a178389e8..0000000000 --- a/test/cases/compile_errors/stage1/exe/private_main_fn.zig +++ /dev/null @@ -1,9 +0,0 @@ -fn main() void {} - -// error -// backend=stage1 -// target=native -// output_mode=Exe -// -// error: 'main' is private -// tmp.zig:1:1: note: declared here |
