Skip to content

Parser crash in incomplete initializer lists #70

@automaticp

Description

@automaticp

Hi, hope you're doing well!

Stumbled upon this during refactoring of some code, here's a repro:

#version 450 core

struct S {
    float value;
};

void main() {
    const S s = {
    const float dummy = 0.0;
}

Version v1.5.1. Below is the output from a dry --parse-file run, maybe that gives you a hint without having to test this yourself.

glsl_analyzer --parse-file src/shaders/test.glsl 
thread 9939 panic: parser ran out of fuel (infinite loop?): parse.Tag.keyword_const
/home/automatic/projects/glsl_analyzer/src/parse.zig:0:17: 0x109f54e in infixExpressionOptImpl (glsl_analyzer)
/home/automatic/projects/glsl_analyzer/src/parse.zig:1053:34: 0x1086acb in constantExpressionOpt (glsl_analyzer)
    return infixExpressionOptImpl(p, .eof);
                                 ^
/home/automatic/projects/glsl_analyzer/src/parse.zig:989:31: 0x1094cf9 in assignmentExpressionOpt (glsl_analyzer)
    if (!constantExpressionOpt(p)) return false;
                              ^
/home/automatic/projects/glsl_analyzer/src/parse.zig:984:33: 0x107d2e4 in initializer (glsl_analyzer)
    if (!assignmentExpressionOpt(p)) p.emitError("expected an expression");
                                ^
/home/automatic/projects/glsl_analyzer/src/parse.zig:720:24: 0x107d270 in initializer (glsl_analyzer)
            initializer(p);
                       ^
/home/automatic/projects/glsl_analyzer/src/parse.zig:943:34: 0x106099e in variableDeclarationSuffix (glsl_analyzer)
    if (p.eat(.@"=")) initializer(p);
                                 ^
/home/automatic/projects/glsl_analyzer/src/parse.zig:938:30: 0x1087391 in simpleStatement (glsl_analyzer)
    variableDeclarationSuffix(p, m_var);
                             ^
/home/automatic/projects/glsl_analyzer/src/parse.zig:879:41: 0x107cb51 in statement (glsl_analyzer)
            const kind = simpleStatement(p);
                                        ^
/home/automatic/projects/glsl_analyzer/src/parse.zig:752:22: 0x106078c in block (glsl_analyzer)
            statement(p);
                     ^
/home/automatic/projects/glsl_analyzer/src/parse.zig:697:26: 0x102c395 in parse (glsl_analyzer)
                    block(p);
                         ^
/home/automatic/projects/glsl_analyzer/src/main.zig:64:35: 0x1050bf5 in main (glsl_analyzer)
        var tree = try parse.parse(allocator, source, .{ .diagnostics = &diagnostics });
                                  ^
/opt/zig/zig-linux-x86_64-0.13.0/lib/std/start.zig:524:37: 0x1057ae5 in main (glsl_analyzer)
            const result = root.main() catch |err| {
                                    ^
../sysdeps/nptl/libc_start_call_main.h:58:16: 0x7f2a21423a8f in __libc_start_call_main (../sysdeps/x86/libc-start.c)
../csu/libc-start.c:360:3: 0x7f2a21423b48 in __libc_start_main_impl (../sysdeps/x86/libc-start.c)
???:?:?: 0x102a194 in ??? (???)
???:?:?: 0x0 in ??? (???)
Aborted (core dumped)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions