blob 151e0baf (17290B) - Raw
1 const std = @import("std"); 2 const os = std.os; 3 const tests = @import("tests.zig"); 4 5 // zig fmt: off 6 pub fn addCases(cases: *tests.StackTracesContext) void { 7 const source_return = 8 \\const std = @import("std"); 9 \\ 10 \\pub fn main() !void { 11 \\ return error.TheSkyIsFalling; 12 \\} 13 ; 14 const source_try_return = 15 \\const std = @import("std"); 16 \\ 17 \\fn foo() !void { 18 \\ return error.TheSkyIsFalling; 19 \\} 20 \\ 21 \\pub fn main() !void { 22 \\ try foo(); 23 \\} 24 ; 25 const source_try_try_return_return = 26 \\const std = @import("std"); 27 \\ 28 \\fn foo() !void { 29 \\ try bar(); 30 \\} 31 \\ 32 \\fn bar() !void { 33 \\ return make_error(); 34 \\} 35 \\ 36 \\fn make_error() !void { 37 \\ return error.TheSkyIsFalling; 38 \\} 39 \\ 40 \\pub fn main() !void { 41 \\ try foo(); 42 \\} 43 ; 44 45 const source_dumpCurrentStackTrace = 46 \\const std = @import("std"); 47 \\ 48 \\fn bar() void { 49 \\ std.debug.dumpCurrentStackTrace(@returnAddress()); 50 \\} 51 \\fn foo() void { 52 \\ bar(); 53 \\} 54 \\pub fn main() u8 { 55 \\ foo(); 56 \\ return 1; 57 \\} 58 ; 59 60 switch (std.Target.current.os.tag) { 61 .freebsd => { 62 cases.addCase( 63 "return", 64 source_return, 65 [_][]const u8{ 66 // debug 67 \\error: TheSkyIsFalling 68 \\source.zig:4:5: [address] in main (test) 69 \\ return error.TheSkyIsFalling; 70 \\ ^ 71 \\ 72 , 73 // release-safe 74 \\error: TheSkyIsFalling 75 \\source.zig:4:5: [address] in std.start.main (test) 76 \\ return error.TheSkyIsFalling; 77 \\ ^ 78 \\ 79 , 80 // release-fast 81 \\error: TheSkyIsFalling 82 \\ 83 , 84 // release-small 85 \\error: TheSkyIsFalling 86 \\ 87 }, 88 ); 89 cases.addCase( 90 "try return", 91 source_try_return, 92 [_][]const u8{ 93 // debug 94 \\error: TheSkyIsFalling 95 \\source.zig:4:5: [address] in foo (test) 96 \\ return error.TheSkyIsFalling; 97 \\ ^ 98 \\source.zig:8:5: [address] in main (test) 99 \\ try foo(); 100 \\ ^ 101 \\ 102 , 103 // release-safe 104 \\error: TheSkyIsFalling 105 \\source.zig:4:5: [address] in std.start.main (test) 106 \\ return error.TheSkyIsFalling; 107 \\ ^ 108 \\source.zig:8:5: [address] in std.start.main (test) 109 \\ try foo(); 110 \\ ^ 111 \\ 112 , 113 // release-fast 114 \\error: TheSkyIsFalling 115 \\ 116 , 117 // release-small 118 \\error: TheSkyIsFalling 119 \\ 120 }, 121 ); 122 cases.addCase( 123 "try try return return", 124 source_try_try_return_return, 125 [_][]const u8{ 126 // debug 127 \\error: TheSkyIsFalling 128 \\source.zig:12:5: [address] in make_error (test) 129 \\ return error.TheSkyIsFalling; 130 \\ ^ 131 \\source.zig:8:5: [address] in bar (test) 132 \\ return make_error(); 133 \\ ^ 134 \\source.zig:4:5: [address] in foo (test) 135 \\ try bar(); 136 \\ ^ 137 \\source.zig:16:5: [address] in main (test) 138 \\ try foo(); 139 \\ ^ 140 \\ 141 , 142 // release-safe 143 \\error: TheSkyIsFalling 144 \\source.zig:12:5: [address] in std.start.main (test) 145 \\ return error.TheSkyIsFalling; 146 \\ ^ 147 \\source.zig:8:5: [address] in std.start.main (test) 148 \\ return make_error(); 149 \\ ^ 150 \\source.zig:4:5: [address] in std.start.main (test) 151 \\ try bar(); 152 \\ ^ 153 \\source.zig:16:5: [address] in std.start.main (test) 154 \\ try foo(); 155 \\ ^ 156 \\ 157 , 158 // release-fast 159 \\error: TheSkyIsFalling 160 \\ 161 , 162 // release-small 163 \\error: TheSkyIsFalling 164 \\ 165 }, 166 ); 167 }, 168 .linux => { 169 cases.addCase( 170 "return", 171 source_return, 172 [_][]const u8{ 173 // debug 174 \\error: TheSkyIsFalling 175 \\source.zig:4:5: [address] in main (test) 176 \\ return error.TheSkyIsFalling; 177 \\ ^ 178 \\ 179 , 180 // release-safe 181 \\error: TheSkyIsFalling 182 \\source.zig:4:5: [address] in std.start.posixCallMainAndExit (test) 183 \\ return error.TheSkyIsFalling; 184 \\ ^ 185 \\ 186 , 187 // release-fast 188 \\error: TheSkyIsFalling 189 \\ 190 , 191 // release-small 192 \\error: TheSkyIsFalling 193 \\ 194 }, 195 ); 196 cases.addCase( 197 "try return", 198 source_try_return, 199 [_][]const u8{ 200 // debug 201 \\error: TheSkyIsFalling 202 \\source.zig:4:5: [address] in foo (test) 203 \\ return error.TheSkyIsFalling; 204 \\ ^ 205 \\source.zig:8:5: [address] in main (test) 206 \\ try foo(); 207 \\ ^ 208 \\ 209 , 210 // release-safe 211 \\error: TheSkyIsFalling 212 \\source.zig:4:5: [address] in std.start.posixCallMainAndExit (test) 213 \\ return error.TheSkyIsFalling; 214 \\ ^ 215 \\source.zig:8:5: [address] in std.start.posixCallMainAndExit (test) 216 \\ try foo(); 217 \\ ^ 218 \\ 219 , 220 // release-fast 221 \\error: TheSkyIsFalling 222 \\ 223 , 224 // release-small 225 \\error: TheSkyIsFalling 226 \\ 227 }, 228 ); 229 cases.addCase( 230 "try try return return", 231 source_try_try_return_return, 232 [_][]const u8{ 233 // debug 234 \\error: TheSkyIsFalling 235 \\source.zig:12:5: [address] in make_error (test) 236 \\ return error.TheSkyIsFalling; 237 \\ ^ 238 \\source.zig:8:5: [address] in bar (test) 239 \\ return make_error(); 240 \\ ^ 241 \\source.zig:4:5: [address] in foo (test) 242 \\ try bar(); 243 \\ ^ 244 \\source.zig:16:5: [address] in main (test) 245 \\ try foo(); 246 \\ ^ 247 \\ 248 , 249 // release-safe 250 \\error: TheSkyIsFalling 251 \\source.zig:12:5: [address] in std.start.posixCallMainAndExit (test) 252 \\ return error.TheSkyIsFalling; 253 \\ ^ 254 \\source.zig:8:5: [address] in std.start.posixCallMainAndExit (test) 255 \\ return make_error(); 256 \\ ^ 257 \\source.zig:4:5: [address] in std.start.posixCallMainAndExit (test) 258 \\ try bar(); 259 \\ ^ 260 \\source.zig:16:5: [address] in std.start.posixCallMainAndExit (test) 261 \\ try foo(); 262 \\ ^ 263 \\ 264 , 265 // release-fast 266 \\error: TheSkyIsFalling 267 \\ 268 , 269 // release-small 270 \\error: TheSkyIsFalling 271 \\ 272 }, 273 ); 274 cases.addCase( 275 "dumpCurrentStackTrace", 276 source_dumpCurrentStackTrace, 277 [_][]const u8{ 278 // debug 279 \\source.zig:7:8: [address] in foo (test) 280 \\ bar(); 281 \\ ^ 282 \\source.zig:10:8: [address] in main (test) 283 \\ foo(); 284 \\ ^ 285 \\start.zig:331:29: [address] in std.start.posixCallMainAndExit (test) 286 \\ return root.main(); 287 \\ ^ 288 \\start.zig:162:5: [address] in std.start._start (test) 289 \\ @call(.{ .modifier = .never_inline }, posixCallMainAndExit, .{}); 290 \\ ^ 291 \\ 292 , 293 // release-safe 294 switch (std.Target.current.cpu.arch) { 295 .aarch64 => "", // TODO disabled; results in segfault 296 else => 297 \\start.zig:162:5: [address] in std.start._start (test) 298 \\ @call(.{ .modifier = .never_inline }, posixCallMainAndExit, .{}); 299 \\ ^ 300 \\ 301 , 302 }, 303 // release-fast 304 \\ 305 , 306 // release-small 307 \\ 308 }, 309 ); 310 }, 311 .macos => { 312 cases.addCase( 313 "return", 314 source_return, 315 [_][]const u8{ 316 // debug 317 \\error: TheSkyIsFalling 318 \\source.zig:4:5: [address] in main (test) 319 \\ return error.TheSkyIsFalling; 320 \\ ^ 321 \\ 322 , 323 // release-safe 324 \\error: TheSkyIsFalling 325 \\source.zig:4:5: [address] in std.start.main (test) 326 \\ return error.TheSkyIsFalling; 327 \\ ^ 328 \\ 329 , 330 // release-fast 331 \\error: TheSkyIsFalling 332 \\ 333 , 334 // release-small 335 \\error: TheSkyIsFalling 336 \\ 337 }, 338 ); 339 cases.addCase( 340 "try return", 341 source_try_return, 342 [_][]const u8{ 343 // debug 344 \\error: TheSkyIsFalling 345 \\source.zig:4:5: [address] in foo (test) 346 \\ return error.TheSkyIsFalling; 347 \\ ^ 348 \\source.zig:8:5: [address] in main (test) 349 \\ try foo(); 350 \\ ^ 351 \\ 352 , 353 // release-safe 354 \\error: TheSkyIsFalling 355 \\source.zig:4:5: [address] in std.start.main (test) 356 \\ return error.TheSkyIsFalling; 357 \\ ^ 358 \\source.zig:8:5: [address] in std.start.main (test) 359 \\ try foo(); 360 \\ ^ 361 \\ 362 , 363 // release-fast 364 \\error: TheSkyIsFalling 365 \\ 366 , 367 // release-small 368 \\error: TheSkyIsFalling 369 \\ 370 }, 371 ); 372 cases.addCase( 373 "try try return return", 374 source_try_try_return_return, 375 [_][]const u8{ 376 // debug 377 \\error: TheSkyIsFalling 378 \\source.zig:12:5: [address] in make_error (test) 379 \\ return error.TheSkyIsFalling; 380 \\ ^ 381 \\source.zig:8:5: [address] in bar (test) 382 \\ return make_error(); 383 \\ ^ 384 \\source.zig:4:5: [address] in foo (test) 385 \\ try bar(); 386 \\ ^ 387 \\source.zig:16:5: [address] in main (test) 388 \\ try foo(); 389 \\ ^ 390 \\ 391 , 392 // release-safe 393 \\error: TheSkyIsFalling 394 \\source.zig:12:5: [address] in std.start.main (test) 395 \\ return error.TheSkyIsFalling; 396 \\ ^ 397 \\source.zig:8:5: [address] in std.start.main (test) 398 \\ return make_error(); 399 \\ ^ 400 \\source.zig:4:5: [address] in std.start.main (test) 401 \\ try bar(); 402 \\ ^ 403 \\source.zig:16:5: [address] in std.start.main (test) 404 \\ try foo(); 405 \\ ^ 406 \\ 407 , 408 // release-fast 409 \\error: TheSkyIsFalling 410 \\ 411 , 412 // release-small 413 \\error: TheSkyIsFalling 414 \\ 415 }, 416 ); 417 }, 418 .windows => { 419 cases.addCase( 420 "return", 421 source_return, 422 [_][]const u8{ 423 // debug 424 \\error: TheSkyIsFalling 425 \\source.zig:4:5: [address] in main (test.obj) 426 \\ return error.TheSkyIsFalling; 427 \\ ^ 428 \\ 429 , 430 // release-safe 431 // --disabled-- results in segmenetation fault 432 "", 433 // release-fast 434 \\error: TheSkyIsFalling 435 \\ 436 , 437 // release-small 438 \\error: TheSkyIsFalling 439 \\ 440 }, 441 ); 442 cases.addCase( 443 "try return", 444 source_try_return, 445 [_][]const u8{ 446 // debug 447 \\error: TheSkyIsFalling 448 \\source.zig:4:5: [address] in foo (test.obj) 449 \\ return error.TheSkyIsFalling; 450 \\ ^ 451 \\source.zig:8:5: [address] in main (test.obj) 452 \\ try foo(); 453 \\ ^ 454 \\ 455 , 456 // release-safe 457 // --disabled-- results in segmenetation fault 458 "", 459 // release-fast 460 \\error: TheSkyIsFalling 461 \\ 462 , 463 // release-small 464 \\error: TheSkyIsFalling 465 \\ 466 }, 467 ); 468 cases.addCase( 469 "try try return return", 470 source_try_try_return_return, 471 [_][]const u8{ 472 // debug 473 \\error: TheSkyIsFalling 474 \\source.zig:12:5: [address] in make_error (test.obj) 475 \\ return error.TheSkyIsFalling; 476 \\ ^ 477 \\source.zig:8:5: [address] in bar (test.obj) 478 \\ return make_error(); 479 \\ ^ 480 \\source.zig:4:5: [address] in foo (test.obj) 481 \\ try bar(); 482 \\ ^ 483 \\source.zig:16:5: [address] in main (test.obj) 484 \\ try foo(); 485 \\ ^ 486 \\ 487 , 488 // release-safe 489 // --disabled-- results in segmenetation fault 490 "", 491 // release-fast 492 \\error: TheSkyIsFalling 493 \\ 494 , 495 // release-small 496 \\error: TheSkyIsFalling 497 \\ 498 }, 499 ); 500 }, 501 else => {}, 502 } 503 } 504 // zig fmt: off