Extracted from test/compile_errors.zig. I am filing this issue because I am deleting these from the branch I am working on (#14647).
{
constcase=ctx.obj("wrong same named struct", .{});
case.backend=.stage1;
case.addSourceFile("a.zig",
\\pub const Foo = struct {\\ x: i32,\\};
);
case.addSourceFile("b.zig",
\\pub const Foo = struct {\\ z: f64,\\};
);
case.addError(
\\const a = @import("a.zig");\\const b = @import("b.zig");\\\\export fn entry() void {\\ var a1: a.Foo = undefined;\\ bar(&a1);\\}\\\\fn bar(x: *b.Foo) void {_ = x;}
, &[_][]constu8{
"tmp.zig:6:10: error: expected type '*b.Foo', found '*a.Foo'",
"tmp.zig:6:10: note: pointer type child 'a.Foo' cannot cast into pointer type child 'b.Foo'",
"a.zig:1:17: note: a.Foo declared here",
"b.zig:1:17: note: b.Foo declared here",
});
}
ctx.objErrStage1("non-printable invalid character", "\xff\xfe"++"fn foo() bool {\r\n"++" return true;\r\n"++"}\r\n", &[_][]constu8{
"tmp.zig:1:1: error: expected test, comptime, var decl, or container field, found 'invalid bytes'",
"tmp.zig:1:1: note: invalid byte: '\\xff'",
});
ctx.objErrStage1("non-printable invalid character with escape alternative", "fn foo() bool {\n"++"\treturn true;\n"++"}\n", &[_][]constu8{
"tmp.zig:2:1: error: invalid character: '\\t'",
});
// TODO test this in stage2, but we won't even try in stage1//ctx.objErrStage1("inline fn calls itself indirectly",// \\export fn foo() void {// \\ bar();// \\}// \\fn bar() callconv(.Inline) void {// \\ baz();// \\ quux();// \\}// \\fn baz() callconv(.Inline) void {// \\ bar();// \\ quux();// \\}// \\extern fn quux() void;//, &[_][]const u8{// "tmp.zig:4:1: error: unable to inline function",//});//ctx.objErrStage1("save reference to inline function",// \\export fn foo() void {// \\ quux(@ptrToInt(bar));// \\}// \\fn bar() callconv(.Inline) void { }// \\extern fn quux(usize) void;//, &[_][]const u8{// "tmp.zig:4:1: error: unable to inline function",//});
Extracted from test/compile_errors.zig. I am filing this issue because I am deleting these from the branch I am working on (#14647).
{ constcase=ctx.obj("wrong same named struct", .{}); case.backend=.stage1; case.addSourceFile("a.zig", \\pub const Foo = struct {\\ x: i32,\\}; ); case.addSourceFile("b.zig", \\pub const Foo = struct {\\ z: f64,\\}; ); case.addError( \\const a = @import("a.zig");\\const b = @import("b.zig");\\\\export fn entry() void {\\ var a1: a.Foo = undefined;\\ bar(&a1);\\}\\\\fn bar(x: *b.Foo) void {_ = x;} , &[_][]constu8{ "tmp.zig:6:10: error: expected type '*b.Foo', found '*a.Foo'", "tmp.zig:6:10: note: pointer type child 'a.Foo' cannot cast into pointer type child 'b.Foo'", "a.zig:1:17: note: a.Foo declared here", "b.zig:1:17: note: b.Foo declared here", }); } ctx.objErrStage1("non-printable invalid character", "\xff\xfe"++"fn foo() bool {\r\n"++" return true;\r\n"++"}\r\n", &[_][]constu8{ "tmp.zig:1:1: error: expected test, comptime, var decl, or container field, found 'invalid bytes'", "tmp.zig:1:1: note: invalid byte: '\\xff'", }); ctx.objErrStage1("non-printable invalid character with escape alternative", "fn foo() bool {\n"++"\treturn true;\n"++"}\n", &[_][]constu8{ "tmp.zig:2:1: error: invalid character: '\\t'", }); // TODO test this in stage2, but we won't even try in stage1//ctx.objErrStage1("inline fn calls itself indirectly",// \\export fn foo() void {// \\ bar();// \\}// \\fn bar() callconv(.Inline) void {// \\ baz();// \\ quux();// \\}// \\fn baz() callconv(.Inline) void {// \\ bar();// \\ quux();// \\}// \\extern fn quux() void;//, &[_][]const u8{// "tmp.zig:4:1: error: unable to inline function",//});//ctx.objErrStage1("save reference to inline function",// \\export fn foo() void {// \\ quux(@ptrToInt(bar));// \\}// \\fn bar() callconv(.Inline) void { }// \\extern fn quux(usize) void;//, &[_][]const u8{// "tmp.zig:4:1: error: unable to inline function",//});