Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unreachable code when preprocessor invokes parser with undefined division argument #89

Closed
ehaas opened this issue Nov 13, 2021 · 0 comments
Labels
bug Something isn't working

Comments

@ehaas
Copy link
Collaborator

ehaas commented Nov 13, 2021

(clang errors with error: division by zero in preprocessor expression for this snippet)

#if 1/q
#endif
thread 18069770 panic: reached unreachable code
/Users/ehaas/source/zig/build/lib/zig/std/debug.zig:226:14: 0x104f172f8 in std.debug.assert (arocc)
    if (!ok) unreachable; // assertion failure
             ^
/Users/ehaas/source/arocc/src/Parser.zig:3631:15: 0x104fe0607 in Parser.Result.saveValue (arocc)
        assert(!p.in_macro);
              ^
/Users/ehaas/source/arocc/src/Parser.zig:3625:24: 0x1050419ae in Parser.Result.shouldEval (arocc)
        try a.saveValue(p);
                       ^
/Users/ehaas/source/arocc/src/Parser.zig:3362:32: 0x105009235 in Parser.Result.adjustTypes (arocc)
            return a.shouldEval(b, p);
                               ^
/Users/ehaas/source/arocc/src/Parser.zig:4238:32: 0x105078204 in Parser.mulExpr (arocc)
        if (try lhs.adjustTypes(percent.?, &rhs, p, if (tag == .mod_expr) .integer else .arithmetic)) {
                               ^
/Users/ehaas/source/arocc/src/Parser.zig:4196:28: 0x105077734 in Parser.addExpr (arocc)
    var lhs = try p.mulExpr();
                           ^
/Users/ehaas/source/arocc/src/Parser.zig:4164:28: 0x105076cc4 in Parser.shiftExpr (arocc)
    var lhs = try p.addExpr();
                           ^
/Users/ehaas/source/arocc/src/Parser.zig:4135:30: 0x105076374 in Parser.compExpr (arocc)
    var lhs = try p.shiftExpr();
                             ^
/Users/ehaas/source/arocc/src/Parser.zig:4110:29: 0x1050758f4 in Parser.eqExpr (arocc)
    var lhs = try p.compExpr();
                            ^
/Users/ehaas/source/arocc/src/Parser.zig:4090:27: 0x1050739d4 in Parser.andExpr (arocc)
    var lhs = try p.eqExpr();
                          ^
/Users/ehaas/source/arocc/src/Parser.zig:4070:28: 0x10506c7c4 in Parser.xorExpr (arocc)
    var lhs = try p.andExpr();
                           ^
/Users/ehaas/source/arocc/src/Parser.zig:4050:28: 0x10505ff34 in Parser.orExpr (arocc)
    var lhs = try p.xorExpr();
                           ^
/Users/ehaas/source/arocc/src/Parser.zig:4028:27: 0x105040744 in Parser.landExpr (arocc)
    var lhs = try p.orExpr();
                          ^
/Users/ehaas/source/arocc/src/Parser.zig:4006:29: 0x1050085b4 in Parser.lorExpr (arocc)
    var lhs = try p.landExpr();
                            ^
/Users/ehaas/source/arocc/src/Parser.zig:3968:29: 0x104fd6dd4 in Parser.condExpr (arocc)
    var cond = try p.lorExpr();
                            ^
/Users/ehaas/source/arocc/src/Parser.zig:3199:27: 0x104f7dc4e in Parser.macroExpr (arocc)
    const res = p.condExpr() catch |e| switch (e) {
                          ^
/Users/ehaas/source/arocc/src/Preprocessor.zig:465:28: 0x104f4e192 in Preprocessor.expr (arocc)
    return parser.macroExpr();
                           ^
/Users/ehaas/source/arocc/src/Preprocessor.zig:181:40: 0x104f428b9 in Preprocessor.preprocess (arocc)
                        if (try pp.expr(&tokenizer)) {
                                       ^
/Users/ehaas/source/arocc/src/main.zig:237:22: 0x104f27818 in processSource (arocc)
    try pp.preprocess(source);
                     ^
/Users/ehaas/source/arocc/src/main.zig:223:22: 0x104f1c151 in handleArgs (arocc)
        processSource(comp, source, builtin, user_macros) catch |e| switch (e) {
                     ^
/Users/ehaas/source/arocc/src/main.zig:41:15: 0x104f192dd in main (arocc)
    handleArgs(&comp, args) catch |err| switch (err) {
              ^
/Users/ehaas/source/zig/build/lib/zig/std/start.zig:524:29: 0x104f96b0c in std.start.callMain (arocc)
            return root.main();
                            ^
/Users/ehaas/source/zig/build/lib/zig/std/start.zig:469:12: 0x104f1d257 in std.start.callMainWithArgs (arocc)
    return @call(.{ .modifier = .always_inline }, callMain, .{});
           ^
/Users/ehaas/source/zig/build/lib/zig/std/start.zig:434:12: 0x104f1d195 in std.start.main (arocc)
    return @call(.{ .modifier = .always_inline }, callMainWithArgs, .{ @intCast(usize, c_argc), c_argv, envp });
           ^
???:?:?: 0x7fff204ecf3c in ??? (???)
???:?:?: 0x1 in ??? (???)
[1]    71375 abort      ~/source/arocc/zig-out/bin/arocc test.c
@Vexu Vexu added the bug Something isn't working label Nov 13, 2021
@Vexu Vexu closed this as completed in 2709090 Nov 13, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants