zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

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