diff --git a/src/Sema.zig b/src/Sema.zig index 0d568f8b382dde66c7ff7c0fc3bba1e4a529c161..30cebe18b339ff593f8965c5500cf4988d41aa0f 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -4272,7 +4272,8 @@ fn zirCompileLog( } try writer.print("\n", .{}); - const gop = try sema.mod.compile_log_decls.getOrPut(sema.gpa, sema.owner_decl_index); + const decl_index = if (sema.func) |some| some.owner_decl else sema.owner_decl_index; + const gop = try sema.mod.compile_log_decls.getOrPut(sema.gpa, decl_index); if (!gop.found_existing) { gop.value_ptr.* = src_node; } diff --git a/test/cases/compile_errors/compile-time_division_by_zero.zig b/test/cases/compile_errors/compile-time_division_by_zero.zig new file mode 100644 index 0000000000000000000000000000000000000000..969598e50052a53fca49ab77e1172879252fcd3c --- /dev/null +++ b/test/cases/compile_errors/compile-time_division_by_zero.zig @@ -0,0 +1,12 @@ +comptime { + const a: i32 = 1; + const b: i32 = 0; + const c = a / b; + _ = c; +} + +// error +// backend=stage2 +// target=native +// +// :4:19: error: division by zero here causes undefined behavior diff --git a/test/cases/compile_errors/compile-time_remainder_division_by_zero.zig b/test/cases/compile_errors/compile-time_remainder_division_by_zero.zig new file mode 100644 index 0000000000000000000000000000000000000000..301fad6a68e686906f237e87fd13f720e3525c86 --- /dev/null +++ b/test/cases/compile_errors/compile-time_remainder_division_by_zero.zig @@ -0,0 +1,12 @@ +comptime { + const a: i32 = 1; + const b: i32 = 0; + const c = a % b; + _ = c; +} + +// error +// backend=stage2 +// target=native +// +// :4:19: error: division by zero here causes undefined behavior diff --git a/test/cases/compile_errors/compileLog_of_tagged_enum_doesnt_crash_the_compiler.zig b/test/cases/compile_errors/compileLog_of_tagged_enum_doesnt_crash_the_compiler.zig new file mode 100644 index 0000000000000000000000000000000000000000..9189eeb48d4817cff282977b1c20c8596bb0a7f2 --- /dev/null +++ b/test/cases/compile_errors/compileLog_of_tagged_enum_doesnt_crash_the_compiler.zig @@ -0,0 +1,17 @@ +const Bar = union(enum(u32)) { + X: i32 = 1 +}; + +fn testCompileLog(x: Bar) void { + @compileLog(x); +} + +pub export fn entry() void { + comptime testCompileLog(Bar{.X = 123}); +} + +// error +// backend=stage2 +// target=native +// +// :6:5: error: found compile log statement diff --git a/test/cases/compile_errors/compile_log.zig b/test/cases/compile_errors/compile_log.zig new file mode 100644 index 0000000000000000000000000000000000000000..281f8747d23fbba125e5236f8499673b40cdaa34 --- /dev/null +++ b/test/cases/compile_errors/compile_log.zig @@ -0,0 +1,14 @@ +export fn foo() void { + comptime bar(12, "hi",); +} +fn bar(a: i32, b: []const u8) void { + @compileLog("begin",); + @compileLog("a", a, "b", b); + @compileLog("end",); +} + +// error +// backend=llvm +// target=native +// +// :5:5: error: found compile log statement diff --git a/test/cases/compile_errors/compile_log_statement_inside_function_which_must_be_comptime_evaluated.zig b/test/cases/compile_errors/compile_log_statement_inside_function_which_must_be_comptime_evaluated.zig new file mode 100644 index 0000000000000000000000000000000000000000..0bc45eae0a753f995216e05fa8d2d89bd6aef8ac --- /dev/null +++ b/test/cases/compile_errors/compile_log_statement_inside_function_which_must_be_comptime_evaluated.zig @@ -0,0 +1,14 @@ +fn Foo(comptime T: type) type { + @compileLog(@typeName(T)); + return T; +} +export fn entry() void { + _ = Foo(i32); + _ = @typeName(Foo(i32)); +} + +// error +// backend=stage2 +// target=native +// +// :2:5: error: found compile log statement diff --git a/test/cases/compile_errors/compile_time_division_by_zero.zig b/test/cases/compile_errors/compile_time_division_by_zero.zig new file mode 100644 index 0000000000000000000000000000000000000000..281ccf28a1d4b74a21b42376a7f04e4cb11d97e1 --- /dev/null +++ b/test/cases/compile_errors/compile_time_division_by_zero.zig @@ -0,0 +1,13 @@ +const y = foo(0); +fn foo(x: u32) u32 { + return 1 / x; +} + +export fn entry() usize { return @sizeOf(@TypeOf(y)); } + +// error +// backend=llvm +// target=native +// +// :3:16: error: division by zero here causes undefined behavior +// :1:14: note: called from here diff --git a/test/cases/compile_errors/stage1/obj/compile-time_division_by_zero.zig b/test/cases/compile_errors/stage1/obj/compile-time_division_by_zero.zig deleted file mode 100644 index e16f5f8cf40daa97aa8da6e62898055520129cc3..0000000000000000000000000000000000000000 --- a/test/cases/compile_errors/stage1/obj/compile-time_division_by_zero.zig +++ /dev/null @@ -1,12 +0,0 @@ -comptime { - const a: i32 = 1; - const b: i32 = 0; - const c = a / b; - _ = c; -} - -// error -// backend=stage1 -// target=native -// -// tmp.zig:4:17: error: division by zero diff --git a/test/cases/compile_errors/stage1/obj/compile-time_remainder_division_by_zero.zig b/test/cases/compile_errors/stage1/obj/compile-time_remainder_division_by_zero.zig deleted file mode 100644 index 63f0def52c1e50e85118461ba84a00e30559ce31..0000000000000000000000000000000000000000 --- a/test/cases/compile_errors/stage1/obj/compile-time_remainder_division_by_zero.zig +++ /dev/null @@ -1,12 +0,0 @@ -comptime { - const a: i32 = 1; - const b: i32 = 0; - const c = a % b; - _ = c; -} - -// error -// backend=stage1 -// target=native -// -// tmp.zig:4:17: error: division by zero diff --git a/test/cases/compile_errors/stage1/obj/compileLog_of_tagged_enum_doesnt_crash_the_compiler.zig b/test/cases/compile_errors/stage1/obj/compileLog_of_tagged_enum_doesnt_crash_the_compiler.zig deleted file mode 100644 index 36e1ee111850e05b7be54c3017c49bbc61d94205..0000000000000000000000000000000000000000 --- a/test/cases/compile_errors/stage1/obj/compileLog_of_tagged_enum_doesnt_crash_the_compiler.zig +++ /dev/null @@ -1,17 +0,0 @@ -const Bar = union(enum(u32)) { - X: i32 = 1 -}; - -fn testCompileLog(x: Bar) void { - @compileLog(x); -} - -pub fn main () void { - comptime testCompileLog(Bar{.X = 123}); -} - -// error -// backend=stage1 -// target=native -// -// tmp.zig:6:5: error: found compile log statement diff --git a/test/cases/compile_errors/stage1/obj/compile_log.zig b/test/cases/compile_errors/stage1/obj/compile_log.zig deleted file mode 100644 index 7f5d52240769afe7e61eb9f70ed52ef8f9c6f6fb..0000000000000000000000000000000000000000 --- a/test/cases/compile_errors/stage1/obj/compile_log.zig +++ /dev/null @@ -1,16 +0,0 @@ -export fn foo() void { - comptime bar(12, "hi",); -} -fn bar(a: i32, b: []const u8) void { - @compileLog("begin",); - @compileLog("a", a, "b", b); - @compileLog("end",); -} - -// error -// backend=stage1 -// target=native -// -// tmp.zig:5:5: error: found compile log statement -// tmp.zig:6:5: error: found compile log statement -// tmp.zig:7:5: error: found compile log statement diff --git a/test/cases/compile_errors/stage1/obj/compile_log_statement_inside_function_which_must_be_comptime_evaluated.zig b/test/cases/compile_errors/stage1/obj/compile_log_statement_inside_function_which_must_be_comptime_evaluated.zig deleted file mode 100644 index 19b96048cb90dd9857a26f57ee8a77e8d757edf7..0000000000000000000000000000000000000000 --- a/test/cases/compile_errors/stage1/obj/compile_log_statement_inside_function_which_must_be_comptime_evaluated.zig +++ /dev/null @@ -1,14 +0,0 @@ -fn Foo(comptime T: type) type { - @compileLog(@typeName(T)); - return T; -} -export fn entry() void { - _ = Foo(i32); - _ = @typeName(Foo(i32)); -} - -// error -// backend=stage1 -// target=native -// -// tmp.zig:2:5: error: found compile log statement diff --git a/test/cases/compile_errors/stage1/obj/compile_time_division_by_zero.zig b/test/cases/compile_errors/stage1/obj/compile_time_division_by_zero.zig deleted file mode 100644 index 7f7e168f027cc4221584ed770602b8a86b937c7a..0000000000000000000000000000000000000000 --- a/test/cases/compile_errors/stage1/obj/compile_time_division_by_zero.zig +++ /dev/null @@ -1,12 +0,0 @@ -const y = foo(0); -fn foo(x: u32) u32 { - return 1 / x; -} - -export fn entry() usize { return @sizeOf(@TypeOf(y)); } - -// error -// backend=stage1 -// target=native -// -// tmp.zig:3:14: error: division by zero