Skip to content

panic token start larger than end index #219

@ianic

Description

@ianic

Reduction of raspberry pico sdk to:

extern struct stats_ lwip_stats;

#define STATS_INC_USED(x, y, type)                                             \
    do {                                                                       \
        lwip_stats.x.used = (type)(lwip_stats.x.used + y);                     \
        if (lwip_stats.x.max < lwip_stats.x.used) {                            \
            lwip_stats.x.max = lwip_stats.x.used;                              \
        }                                                                      \
    } while (0)
#define STATS_GET(x) lwip_stats.x

results in panic:

$ ../../translate-c/zig-out/bin/translate-c src/regression4.h
thread 12348 panic: start index 556 is larger than end index 0
/home/ianic/Code/translate-c/src/MacroTranslator.zig:70:21: 0x1377cc6 in tokSlice (main.zig)
    return mt.source[tok.start..tok.end];
                    ^
/home/ianic/Code/translate-c/src/MacroTranslator.zig:1136:47: 0x181d07c in parseCPostfixExprInner (main.zig)
                const field_name = mt.tokSlice();
                                              ^
/home/ianic/Code/translate-c/src/MacroTranslator.zig:1102:45: 0x180ea5f in parseCPostfixExpr (main.zig)
    var node = try mt.parseCPostfixExprInner(scope, type_name);
                                            ^
/home/ianic/Code/translate-c/src/MacroTranslator.zig:1320:36: 0x180fe9c in parseCUnaryExpr (main.zig)
    return try mt.parseCPostfixExpr(scope, null);
                                   ^
/home/ianic/Code/translate-c/src/MacroTranslator.zig:888:30: 0x18041ee in parseCCastExpr (main.zig)
    return mt.parseCUnaryExpr(scope);
                             ^
/home/ianic/Code/translate-c/src/MacroTranslator.zig:830:37: 0x17fd2d1 in parseCMulExpr (main.zig)
    var node = try mt.parseCCastExpr(scope);
                                    ^
/home/ianic/Code/translate-c/src/MacroTranslator.zig:809:36: 0x17f9bf1 in parseCAddSubExpr (main.zig)
    var node = try mt.parseCMulExpr(scope);
                                   ^
/home/ianic/Code/translate-c/src/MacroTranslator.zig:788:39: 0x17f36b1 in parseCShiftExpr (main.zig)
    var node = try mt.parseCAddSubExpr(scope);
                                      ^
/home/ianic/Code/translate-c/src/MacroTranslator.zig:755:38: 0x17e9aa1 in parseCRelExpr (main.zig)
    var node = try mt.parseCShiftExpr(scope);
                                     ^
/home/ianic/Code/translate-c/src/MacroTranslator.zig:734:36: 0x17d3bc1 in parseCEqExpr (main.zig)
    var node = try mt.parseCRelExpr(scope);
                                   ^
/home/ianic/Code/translate-c/src/MacroTranslator.zig:724:35: 0x1791091 in parseCBitAndExpr (main.zig)
    var node = try mt.parseCEqExpr(scope);
                                  ^
/home/ianic/Code/translate-c/src/MacroTranslator.zig:714:39: 0x1740d51 in parseCBitXorExpr (main.zig)
    var node = try mt.parseCBitAndExpr(scope);
                                      ^
/home/ianic/Code/translate-c/src/MacroTranslator.zig:704:39: 0x16f5261 in parseCBitOrExpr (main.zig)
    var node = try mt.parseCBitXorExpr(scope);
                                      ^
/home/ianic/Code/translate-c/src/MacroTranslator.zig:694:38: 0x165eba1 in parseCAndExpr (main.zig)
    var node = try mt.parseCBitOrExpr(scope);
                                     ^
/home/ianic/Code/translate-c/src/MacroTranslator.zig:684:36: 0x1569721 in parseCOrExpr (main.zig)
    var node = try mt.parseCAndExpr(scope);
                                   ^
/home/ianic/Code/translate-c/src/MacroTranslator.zig:674:37: 0x14841a1 in parseCCondExpr (main.zig)
    const node = try mt.parseCOrExpr(scope);
                                    ^
/home/ianic/Code/translate-c/src/MacroTranslator.zig:236:39: 0x13761d3 in parseCExpr (main.zig)
    const node = try mt.parseCCondExpr(&block_scope.base);
                                      ^
/home/ianic/Code/translate-c/src/MacroTranslator.zig:89:35: 0x12cf320 in transFnMacro (main.zig)
    const expr = try mt.parseCExpr(scope);
                                  ^
/home/ianic/Code/translate-c/src/Translator.zig:4065:42: 0x124e7df in transMacros (main.zig)
            macro_translator.transFnMacro()
                                         ^
/home/ianic/Code/translate-c/src/Translator.zig:209:31: 0x12538c4 in translate (main.zig)
    try translator.transMacros();
                              ^
/home/ianic/Code/translate-c/src/main.zig:192:50: 0x11edd0f in translate (main.zig)
    const rendered_zig = try Translator.translate(.{
                                                 ^
/home/ianic/Code/translate-c/src/main.zig:57:14: 0x11f00f2 in main (main.zig)
    translate(&driver, &toolchain, args) catch |err| switch (err) {
             ^
/home/ianic/.cache/zig/p/N-V-__8AALr0lhQik6cxQmTLe98qXRuSaa9WIHX4CLmuGNYN/lib/std/start.zig:622:29: 0x11cf32c in callMain (std.zig)
            return root.main();
                            ^
/home/ianic/.cache/zig/p/N-V-__8AALr0lhQik6cxQmTLe98qXRuSaa9WIHX4CLmuGNYN/lib/std/start.zig:232:5: 0x11cee01 in _start (std.zig)
    asm volatile (switch (native_arch) {
    ^
zsh: IOT instruction (core dumped)  ../../translate-c/zig-out/bin/translate-c src/regression4.h

Using translate-c built from this repo.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions