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

Parser: assertion failure in usualArithmeticConversion #84

Closed
ehaas opened this issue Nov 7, 2021 · 2 comments
Closed

Parser: assertion failure in usualArithmeticConversion #84

ehaas opened this issue Nov 7, 2021 · 2 comments
Labels
bug Something isn't working

Comments

@ehaas
Copy link
Collaborator

ehaas commented Nov 7, 2021

The following code triggers an assertion failure:

int foo = 0xFFFFFFFFFF + 1u;
thread 15090414 panic: reached unreachable code
/Users/ehaas/source/zig/build/lib/zig/std/debug.zig:226:14: 0x10705a2f8 in std.debug.assert (arocc)
    if (!ok) unreachable; // assertion failure
             ^
/Users/ehaas/source/arocc/src/Parser.zig:3590:19: 0x107186309 in Parser.Result.usualArithmeticConversion (arocc)
            assert(b_unsigned and (@enumToInt(b_promoted.specifier) >= @enumToInt(a_promoted.specifier)));
                  ^
/Users/ehaas/source/arocc/src/Parser.zig:3345:44: 0x10714e016 in Parser.Result.adjustTypes (arocc)
            try a.usualArithmeticConversion(b, p);
                                           ^
/Users/ehaas/source/arocc/src/Parser.zig:4186:32: 0x1071bc2f0 in Parser.addExpr (arocc)
        if (try lhs.adjustTypes(minus.?, &rhs, p, if (plus != null) .add else .sub)) {
                               ^
/Users/ehaas/source/arocc/src/Parser.zig:4145:28: 0x1071bb794 in Parser.shiftExpr (arocc)
    var lhs = try p.addExpr();
                           ^
/Users/ehaas/source/arocc/src/Parser.zig:4116:30: 0x1071bafb4 in Parser.compExpr (arocc)
    var lhs = try p.shiftExpr();
                             ^
/Users/ehaas/source/arocc/src/Parser.zig:4091:29: 0x1071ba534 in Parser.eqExpr (arocc)
    var lhs = try p.compExpr();
                            ^
/Users/ehaas/source/arocc/src/Parser.zig:4071:27: 0x1071b8614 in Parser.andExpr (arocc)
    var lhs = try p.eqExpr();
                          ^
/Users/ehaas/source/arocc/src/Parser.zig:4051:28: 0x1071b1404 in Parser.xorExpr (arocc)
    var lhs = try p.andExpr();
                           ^
/Users/ehaas/source/arocc/src/Parser.zig:4031:28: 0x1071a4b74 in Parser.orExpr (arocc)
    var lhs = try p.xorExpr();
                           ^
/Users/ehaas/source/arocc/src/Parser.zig:4009:27: 0x1071853c4 in Parser.landExpr (arocc)
    var lhs = try p.orExpr();
                          ^
/Users/ehaas/source/arocc/src/Parser.zig:3987:29: 0x10714d424 in Parser.lorExpr (arocc)
    var lhs = try p.landExpr();
                            ^
/Users/ehaas/source/arocc/src/Parser.zig:3949:29: 0x10711bb94 in Parser.condExpr (arocc)
    var cond = try p.lorExpr();
                            ^
/Users/ehaas/source/arocc/src/Parser.zig:3804:29: 0x10716b2a4 in Parser.assignExpr (arocc)
    var lhs = try p.condExpr();
                            ^
/Users/ehaas/source/arocc/src/Parser.zig:2126:35: 0x107129bc7 in Parser.initializer (arocc)
        var res = try p.assignExpr();
                                  ^
/Users/ehaas/source/arocc/src/Parser.zig:1197:47: 0x1070cf447 in Parser.initDeclarator (arocc)
        var init_list_expr = try p.initializer(init_d.d.ty);
                                              ^
/Users/ehaas/source/arocc/src/Parser.zig:576:39: 0x10709c5b9 in Parser.decl (arocc)
    var init_d = (try p.initDeclarator(&decl_spec)) orelse {
                                      ^
/Users/ehaas/source/arocc/src/Parser.zig:461:19: 0x1070883ba in Parser.parse (arocc)
        if (p.decl() catch |er| switch (er) {
                  ^
/Users/ehaas/source/arocc/src/main.zig:257:32: 0x10706ac69 in processSource (arocc)
    var tree = try Parser.parse(&pp);
                               ^
/Users/ehaas/source/arocc/src/main.zig:223:22: 0x10705f211 in handleArgs (arocc)
        processSource(comp, source, builtin, user_macros) catch |e| switch (e) {
                     ^
/Users/ehaas/source/arocc/src/main.zig:41:15: 0x10705c39d in main (arocc)
    handleArgs(&comp, args) catch |err| switch (err) {
              ^
/Users/ehaas/source/zig/build/lib/zig/std/start.zig:524:29: 0x1070db5fc in std.start.callMain (arocc)
            return root.main();
                            ^
/Users/ehaas/source/zig/build/lib/zig/std/start.zig:469:12: 0x107060317 in std.start.callMainWithArgs (arocc)
    return @call(.{ .modifier = .always_inline }, callMain, .{});
           ^
/Users/ehaas/source/zig/build/lib/zig/std/start.zig:434:12: 0x107060255 in std.start.main (arocc)
    return @call(.{ .modifier = .always_inline }, callMainWithArgs, .{ @intCast(usize, c_argc), c_argv, envp });
           ^
???:?:?: 0x7fff204ecf3c in ??? (???)
???:?:?: 0x1 in ??? (???)
[1]    89704 abort      ./zig-out/bin/arocc test/cases/crash.c
@ehaas
Copy link
Collaborator Author

ehaas commented Nov 8, 2021

This can also be triggered with a comparison:

void foo(void) {
    int x = 1L == 1U;
}

@Vexu Vexu added the bug Something isn't working label Nov 8, 2021
@Vexu
Copy link
Owner

Vexu commented Nov 8, 2021

I have fixed this locally but forgotten to push the change.

@Vexu Vexu closed this as completed in ccd6be5 Nov 8, 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