authorgravatar for david@vortan.devDavid Rubin <david@vortan.dev> 2024-12-17 04:29:39-08:00
committergravatar for david@vortan.devDavid Rubin <david@vortan.dev> 2025-02-25 11:22:33-08:00
logeef8d4ff4fff849c7b214bed05e49e7906cc7809
tree917f74e6d1f96a6b1812e3a4069edd3fbd8087aa
parent5e0073c898b74f03f0c0e7f8cb859b9ac719bf43

ubsan: switch to using `std.builtin.panicExtra` to log errors


1 files changed, 15 insertions(+), 17 deletions(-)

lib/std/ubsan.zig+15-17
......@@ -146,7 +146,7 @@ fn overflowHandler(
146146
147147 const is_signed = data.type_descriptor.isSigned();
148148 const fmt = "{s} integer overflow: " ++ "{} " ++
149 operator ++ " {} cannot be represented in type {s}\n";
149 operator ++ " {} cannot be represented in type {s}";
150150
151151 logMessage(fmt, .{
152152 if (is_signed) "signed" else "unsigned",
......@@ -166,7 +166,7 @@ fn negationHandler(
166166) callconv(.C) noreturn {
167167 const old_value = old_value_handle.getValue(data);
168168 logMessage(
169 "negation of {} cannot be represented in type {s}\n",
169 "negation of {} cannot be represented in type {s}",
170170 .{ old_value, data.type_descriptor.getName() },
171171 );
172172}
......@@ -182,10 +182,10 @@ fn divRemHandler(
182182
183183 if (is_signed and rhs.getSignedInteger() == -1) {
184184 logMessage(
185 "division of {} by -1 cannot be represented in type {s}\n",
185 "division of {} by -1 cannot be represented in type {s}",
186186 .{ lhs, data.type_descriptor.getName() },
187187 );
188 } else logMessage("division by zero\n", .{});
188 } else logMessage("division by zero", .{});
189189}
190190
191191const AlignmentAssumptionData = extern struct {
......@@ -212,12 +212,12 @@ fn alignmentAssumptionHandler(
212212
213213 if (maybe_offset) |offset| {
214214 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",
216216 .{ alignment.getValue(data), @intFromPtr(offset), data.type_descriptor.getName() },
217217 );
218218 } else {
219219 logMessage(
220 "assumption of {} byte alignment for pointer of type {s} failed\n",
220 "assumption of {} byte alignment for pointer of type {s} failed",
221221 .{ alignment.getValue(data), data.type_descriptor.getName() },
222222 );
223223 }
......@@ -241,19 +241,19 @@ fn shiftOob(
241241 rhs.getPositiveInteger() >= data.lhs_type.getIntegerSize())
242242 {
243243 if (rhs.isNegative()) {
244 logMessage("shift exponent {} is negative\n", .{rhs});
244 logMessage("shift exponent {} is negative", .{rhs});
245245 } else {
246246 logMessage(
247 "shift exponent {} is too large for {}-bit type {s}\n",
247 "shift exponent {} is too large for {}-bit type {s}",
248248 .{ rhs, data.lhs_type.getIntegerSize(), data.lhs_type.getName() },
249249 );
250250 }
251251 } else {
252252 if (lhs.isNegative()) {
253 logMessage("left shift of negative value {}\n", .{lhs});
253 logMessage("left shift of negative value {}", .{lhs});
254254 } else {
255255 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}",
257257 .{ lhs, rhs, data.lhs_type.getName() },
258258 );
259259 }
......@@ -269,7 +269,7 @@ const OutOfBoundsData = extern struct {
269269fn outOfBounds(data: *const OutOfBoundsData, index_handle: ValueHandle) callconv(.C) noreturn {
270270 const index: Value = .{ .handle = index_handle, .type_descriptor = data.index_type };
271271 logMessage(
272 "index {} out of bounds for type {s}\n",
272 "index {} out of bounds for type {s}",
273273 .{ index, data.array_type.getName() },
274274 );
275275}
......@@ -285,14 +285,14 @@ fn pointerOverflow(
285285) callconv(.C) noreturn {
286286 if (base == 0) {
287287 if (result == 0) {
288 logMessage("applying zero offset to null pointer\n", .{});
288 logMessage("applying zero offset to null pointer", .{});
289289 } else {
290 logMessage("applying non-zero offset {} to null pointer\n", .{result});
290 logMessage("applying non-zero offset {} to null pointer", .{result});
291291 }
292292 } else {
293293 if (result == 0) {
294294 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",
296296 .{base},
297297 );
298298 } else {
......@@ -335,9 +335,7 @@ fn simpleHandler(
335335}
336336
337337inline fn logMessage(comptime fmt: []const u8, args: anytype) noreturn {
338 std.debug.print(fmt, args);
339 std.debug.dumpCurrentStackTrace(@returnAddress());
340 std.posix.abort();
338 std.debug.panicExtra(null, @returnAddress(), fmt, args);
341339}
342340
343341fn exportHandler(