diff options
Diffstat (limited to 'test/cases/compile_errors')
| -rw-r--r-- | test/cases/compile_errors/bad_panic_call_signature.zig | 45 | ||||
| -rw-r--r-- | test/cases/compile_errors/bad_panic_generic_signature.zig | 41 | ||||
| -rw-r--r-- | test/cases/compile_errors/bad_panic_signature.zig | 28 |
3 files changed, 86 insertions, 28 deletions
diff --git a/test/cases/compile_errors/bad_panic_call_signature.zig b/test/cases/compile_errors/bad_panic_call_signature.zig new file mode 100644 index 0000000000..b383ccf651 --- /dev/null +++ b/test/cases/compile_errors/bad_panic_call_signature.zig @@ -0,0 +1,45 @@ +const simple_panic = std.debug.simple_panic; +pub const panic = struct { + pub fn call(msg: []const u8, bad: usize) noreturn { + _ = msg; + _ = bad; + @trap(); + } + pub const sentinelMismatch = simple_panic.sentinelMismatch; + pub const unwrapError = simple_panic.unwrapError; + pub const outOfBounds = simple_panic.outOfBounds; + pub const startGreaterThanEnd = simple_panic.startGreaterThanEnd; + pub const inactiveUnionField = simple_panic.inactiveUnionField; + pub const reachedUnreachable = simple_panic.reachedUnreachable; + pub const unwrapNull = simple_panic.unwrapNull; + pub const castToNull = simple_panic.castToNull; + pub const incorrectAlignment = simple_panic.incorrectAlignment; + pub const invalidErrorCode = simple_panic.invalidErrorCode; + pub const castTruncatedData = simple_panic.castTruncatedData; + pub const negativeToUnsigned = simple_panic.negativeToUnsigned; + pub const integerOverflow = simple_panic.integerOverflow; + pub const shlOverflow = simple_panic.shlOverflow; + pub const shrOverflow = simple_panic.shrOverflow; + pub const divideByZero = simple_panic.divideByZero; + pub const exactDivisionRemainder = simple_panic.exactDivisionRemainder; + pub const integerPartOutOfBounds = simple_panic.integerPartOutOfBounds; + pub const corruptSwitch = simple_panic.corruptSwitch; + pub const shiftRhsTooBig = simple_panic.shiftRhsTooBig; + pub const invalidEnumValue = simple_panic.invalidEnumValue; + pub const forLenMismatch = simple_panic.forLenMismatch; + pub const memcpyLenMismatch = simple_panic.memcpyLenMismatch; + pub const memcpyAlias = simple_panic.memcpyAlias; + pub const noreturnReturned = simple_panic.noreturnReturned; +}; + +export fn foo(a: u8) void { + @setRuntimeSafety(true); + _ = a + 1; // safety check to reference the panic handler +} + +const std = @import("std"); + +// error +// +// :3:9: error: expected type 'fn ([]const u8, ?usize) noreturn', found 'fn ([]const u8, usize) noreturn' +// :3:9: note: parameter 1 'usize' cannot cast into '?usize' diff --git a/test/cases/compile_errors/bad_panic_generic_signature.zig b/test/cases/compile_errors/bad_panic_generic_signature.zig new file mode 100644 index 0000000000..92fa49c7f3 --- /dev/null +++ b/test/cases/compile_errors/bad_panic_generic_signature.zig @@ -0,0 +1,41 @@ +const simple_panic = std.debug.simple_panic; +pub const panic = struct { + pub fn sentinelMismatch() void {} // invalid + pub const call = simple_panic.call; + pub const unwrapError = simple_panic.unwrapError; + pub const outOfBounds = simple_panic.outOfBounds; + pub const startGreaterThanEnd = simple_panic.startGreaterThanEnd; + pub const inactiveUnionField = simple_panic.inactiveUnionField; + pub const reachedUnreachable = simple_panic.reachedUnreachable; + pub const unwrapNull = simple_panic.unwrapNull; + pub const castToNull = simple_panic.castToNull; + pub const incorrectAlignment = simple_panic.incorrectAlignment; + pub const invalidErrorCode = simple_panic.invalidErrorCode; + pub const castTruncatedData = simple_panic.castTruncatedData; + pub const negativeToUnsigned = simple_panic.negativeToUnsigned; + pub const integerOverflow = simple_panic.integerOverflow; + pub const shlOverflow = simple_panic.shlOverflow; + pub const shrOverflow = simple_panic.shrOverflow; + pub const divideByZero = simple_panic.divideByZero; + pub const exactDivisionRemainder = simple_panic.exactDivisionRemainder; + pub const integerPartOutOfBounds = simple_panic.integerPartOutOfBounds; + pub const corruptSwitch = simple_panic.corruptSwitch; + pub const shiftRhsTooBig = simple_panic.shiftRhsTooBig; + pub const invalidEnumValue = simple_panic.invalidEnumValue; + pub const forLenMismatch = simple_panic.forLenMismatch; + pub const memcpyLenMismatch = simple_panic.memcpyLenMismatch; + pub const memcpyAlias = simple_panic.memcpyAlias; + pub const noreturnReturned = simple_panic.noreturnReturned; +}; + +export fn foo(arr: *const [2]u8) void { + @setRuntimeSafety(true); + _ = arr[0..1 :0]; +} + +const std = @import("std"); + +// error +// +// :3:9: error: expected type 'fn (anytype, anytype) noreturn', found 'fn () void' +// :3:9: note: non-generic function cannot cast into a generic function diff --git a/test/cases/compile_errors/bad_panic_signature.zig b/test/cases/compile_errors/bad_panic_signature.zig deleted file mode 100644 index f9a30ef1d7..0000000000 --- a/test/cases/compile_errors/bad_panic_signature.zig +++ /dev/null @@ -1,28 +0,0 @@ -pub const Panic = struct { - pub const call = badPanicSignature; - pub const sentinelMismatch = std.debug.FormattedPanic.sentinelMismatch; - pub const unwrapError = std.debug.FormattedPanic.unwrapError; - pub const outOfBounds = std.debug.FormattedPanic.outOfBounds; - pub const startGreaterThanEnd = std.debug.FormattedPanic.startGreaterThanEnd; - pub const inactiveUnionField = std.debug.FormattedPanic.inactiveUnionField; - pub const messages = std.debug.FormattedPanic.messages; -}; - -fn badPanicSignature(msg: []const u8, bad1: usize, bad2: void) noreturn { - _ = msg; - _ = bad1; - _ = bad2; - @trap(); -} - -export fn foo(a: u8) void { - @setRuntimeSafety(true); - _ = a + 1; // safety check to reference the panic handler -} - -const std = @import("std"); - -// error -// -// :2:9: error: expected type 'fn ([]const u8, ?*builtin.StackTrace, ?usize) noreturn', found 'fn ([]const u8, usize, void) noreturn' -// :2:9: note: parameter 1 'usize' cannot cast into '?*builtin.StackTrace' |
