| ... | @@ -146,7 +146,7 @@ fn overflowHandler( | ... | @@ -146,7 +146,7 @@ fn overflowHandler( |
| 146 | | 146 | |
| 147 | const is_signed = data.type_descriptor.isSigned(); | 147 | const is_signed = data.type_descriptor.isSigned(); |
| 148 | const fmt = "{s} integer overflow: " ++ "{} " ++ | 148 | const fmt = "{s} integer overflow: " ++ "{} " ++ |
| 149 | operator ++ " {} cannot be represented in type {s}\n"; | 149 | operator ++ " {} cannot be represented in type {s}"; |
| 150 | | 150 | |
| 151 | logMessage(fmt, .{ | 151 | logMessage(fmt, .{ |
| 152 | if (is_signed) "signed" else "unsigned", | 152 | if (is_signed) "signed" else "unsigned", |
| ... | @@ -166,7 +166,7 @@ fn negationHandler( | ... | @@ -166,7 +166,7 @@ fn negationHandler( |
| 166 | ) callconv(.C) noreturn { | 166 | ) callconv(.C) noreturn { |
| 167 | const old_value = old_value_handle.getValue(data); | 167 | const old_value = old_value_handle.getValue(data); |
| 168 | logMessage( | 168 | logMessage( |
| 169 | "negation of {} cannot be represented in type {s}\n", | 169 | "negation of {} cannot be represented in type {s}", |
| 170 | .{ old_value, data.type_descriptor.getName() }, | 170 | .{ old_value, data.type_descriptor.getName() }, |
| 171 | ); | 171 | ); |
| 172 | } | 172 | } |
| ... | @@ -182,10 +182,10 @@ fn divRemHandler( | ... | @@ -182,10 +182,10 @@ fn divRemHandler( |
| 182 | | 182 | |
| 183 | if (is_signed and rhs.getSignedInteger() == -1) { | 183 | if (is_signed and rhs.getSignedInteger() == -1) { |
| 184 | logMessage( | 184 | logMessage( |
| 185 | "division of {} by -1 cannot be represented in type {s}\n", | 185 | "division of {} by -1 cannot be represented in type {s}", |
| 186 | .{ lhs, data.type_descriptor.getName() }, | 186 | .{ lhs, data.type_descriptor.getName() }, |
| 187 | ); | 187 | ); |
| 188 | } else logMessage("division by zero\n", .{}); | 188 | } else logMessage("division by zero", .{}); |
| 189 | } | 189 | } |
| 190 | | 190 | |
| 191 | const AlignmentAssumptionData = extern struct { | 191 | const AlignmentAssumptionData = extern struct { |
| ... | @@ -212,12 +212,12 @@ fn alignmentAssumptionHandler( | ... | @@ -212,12 +212,12 @@ fn alignmentAssumptionHandler( |
| 212 | | 212 | |
| 213 | if (maybe_offset) |offset| { | 213 | if (maybe_offset) |offset| { |
| 214 | logMessage( | 214 | logMessage( |
| 215 | "assumption of {} byte alignment (with offset of {} byte) for pointer of type {s} failed\n", | 215 | "assumption of {} byte alignment (with offset of {} byte) for pointer of type {s} failed", |
| 216 | .{ alignment.getValue(data), @intFromPtr(offset), data.type_descriptor.getName() }, | 216 | .{ alignment.getValue(data), @intFromPtr(offset), data.type_descriptor.getName() }, |
| 217 | ); | 217 | ); |
| 218 | } else { | 218 | } else { |
| 219 | logMessage( | 219 | logMessage( |
| 220 | "assumption of {} byte alignment for pointer of type {s} failed\n", | 220 | "assumption of {} byte alignment for pointer of type {s} failed", |
| 221 | .{ alignment.getValue(data), data.type_descriptor.getName() }, | 221 | .{ alignment.getValue(data), data.type_descriptor.getName() }, |
| 222 | ); | 222 | ); |
| 223 | } | 223 | } |
| ... | @@ -241,19 +241,19 @@ fn shiftOob( | ... | @@ -241,19 +241,19 @@ fn shiftOob( |
| 241 | rhs.getPositiveInteger() >= data.lhs_type.getIntegerSize()) | 241 | rhs.getPositiveInteger() >= data.lhs_type.getIntegerSize()) |
| 242 | { | 242 | { |
| 243 | if (rhs.isNegative()) { | 243 | if (rhs.isNegative()) { |
| 244 | logMessage("shift exponent {} is negative\n", .{rhs}); | 244 | logMessage("shift exponent {} is negative", .{rhs}); |
| 245 | } else { | 245 | } else { |
| 246 | logMessage( | 246 | logMessage( |
| 247 | "shift exponent {} is too large for {}-bit type {s}\n", | 247 | "shift exponent {} is too large for {}-bit type {s}", |
| 248 | .{ rhs, data.lhs_type.getIntegerSize(), data.lhs_type.getName() }, | 248 | .{ rhs, data.lhs_type.getIntegerSize(), data.lhs_type.getName() }, |
| 249 | ); | 249 | ); |
| 250 | } | 250 | } |
| 251 | } else { | 251 | } else { |
| 252 | if (lhs.isNegative()) { | 252 | if (lhs.isNegative()) { |
| 253 | logMessage("left shift of negative value {}\n", .{lhs}); | 253 | logMessage("left shift of negative value {}", .{lhs}); |
| 254 | } else { | 254 | } else { |
| 255 | logMessage( | 255 | logMessage( |
| 256 | "left shift of {} by {} places cannot be represented in type {s}\n", | 256 | "left shift of {} by {} places cannot be represented in type {s}", |
| 257 | .{ lhs, rhs, data.lhs_type.getName() }, | 257 | .{ lhs, rhs, data.lhs_type.getName() }, |
| 258 | ); | 258 | ); |
| 259 | } | 259 | } |
| ... | @@ -269,7 +269,7 @@ const OutOfBoundsData = extern struct { | ... | @@ -269,7 +269,7 @@ const OutOfBoundsData = extern struct { |
| 269 | fn outOfBounds(data: *const OutOfBoundsData, index_handle: ValueHandle) callconv(.C) noreturn { | 269 | fn outOfBounds(data: *const OutOfBoundsData, index_handle: ValueHandle) callconv(.C) noreturn { |
| 270 | const index: Value = .{ .handle = index_handle, .type_descriptor = data.index_type }; | 270 | const index: Value = .{ .handle = index_handle, .type_descriptor = data.index_type }; |
| 271 | logMessage( | 271 | logMessage( |
| 272 | "index {} out of bounds for type {s}\n", | 272 | "index {} out of bounds for type {s}", |
| 273 | .{ index, data.array_type.getName() }, | 273 | .{ index, data.array_type.getName() }, |
| 274 | ); | 274 | ); |
| 275 | } | 275 | } |
| ... | @@ -285,14 +285,14 @@ fn pointerOverflow( | ... | @@ -285,14 +285,14 @@ fn pointerOverflow( |
| 285 | ) callconv(.C) noreturn { | 285 | ) callconv(.C) noreturn { |
| 286 | if (base == 0) { | 286 | if (base == 0) { |
| 287 | if (result == 0) { | 287 | if (result == 0) { |
| 288 | logMessage("applying zero offset to null pointer\n", .{}); | 288 | logMessage("applying zero offset to null pointer", .{}); |
| 289 | } else { | 289 | } else { |
| 290 | logMessage("applying non-zero offset {} to null pointer\n", .{result}); | 290 | logMessage("applying non-zero offset {} to null pointer", .{result}); |
| 291 | } | 291 | } |
| 292 | } else { | 292 | } else { |
| 293 | if (result == 0) { | 293 | if (result == 0) { |
| 294 | logMessage( | 294 | logMessage( |
| 295 | "applying non-zero offset to non-null pointer 0x{x} produced null pointer\n", | 295 | "applying non-zero offset to non-null pointer 0x{x} produced null pointer", |
| 296 | .{base}, | 296 | .{base}, |
| 297 | ); | 297 | ); |
| 298 | } else { | 298 | } else { |
| ... | @@ -335,9 +335,7 @@ fn simpleHandler( | ... | @@ -335,9 +335,7 @@ fn simpleHandler( |
| 335 | } | 335 | } |
| 336 | | 336 | |
| 337 | inline fn logMessage(comptime fmt: []const u8, args: anytype) noreturn { | 337 | inline fn logMessage(comptime fmt: []const u8, args: anytype) noreturn { |
| 338 | std.debug.print(fmt, args); | 338 | std.debug.panicExtra(null, @returnAddress(), fmt, args); |
| 339 | std.debug.dumpCurrentStackTrace(@returnAddress()); | | |
| 340 | std.posix.abort(); | | |
| 341 | } | 339 | } |
| 342 | | 340 | |
| 343 | fn exportHandler( | 341 | fn exportHandler( |