Compiler C Stack overflow in type checker.
LysLysKOM 25574453:
25574453 2022-10-16 10:01 /14 rader/ Marcus Comstedt (ACROSS) (Hail Ilpalazzo!)
Mottagare: Henrik Grubbström (Lysator) <17112>
Mottagare: Marcus Comstedt (ACROSS) (Hail Ilpalazzo!) <17998>
Mottaget: 2022-10-16 10:01
Ärende: C stack overflow
------------------------------------------------------------
Jag försökte minimera ett fall för att reproducera den C stack
overflow som är i testsuite nu. Jag kom fram till följande:
Pike v8.1 release 18 running Hilfe v3.5 (Incremental Pike Frontend)
> compile_string("void a() { foreach(({`/, `^});; function op); }");
C stack overflow.
-:1: PikeCompiler("", -1, -1, UNDEFINED, UNDEFINED)->compile()
master.pike:1088:
DefaultCompilerEnvironment->compile("void a() { foreach(({`/, `^});; function op); }",UNDEFINED,-1,-1,UNDEFINED,UNDEFINED)
master.pike:1102:
compile("void a() { foreach(({`/, `^});; function op); }",UNDEFINED,-1,-1,UNDEFINED,UNDEFINED)
master.pike:1183:
compile_string("void a() { foreach(({`/, `^});; function op); }","-",UNDEFINED,UNDEFINED,UNDEFINED,UNDEFINED)
>
(25574453) /Marcus Comstedt (ACROSS) (Hail Ilpalazzo!)/
Kommentar i text 25574467 av Marcus Comstedt (ACROSS) (Hail Ilpalazzo!)
25574467 2022-10-16 10:26 /26 rader/ Marcus Comstedt (ACROSS) (Hail Ilpalazzo!)
Kommentar till text 25574453 av Marcus Comstedt (ACROSS) (Hail Ilpalazzo!)
Mottagare: Henrik Grubbström (Lysator) <17113>
Mottagare: Marcus Comstedt (ACROSS) (Hail Ilpalazzo!) <17999>
Ärende: C stack overflow
------------------------------------------------------------
BTW, om man försöker detta direkt i Hilfe så döljs felen:
Pike v8.1 release 18 running Hilfe v3.5 (Incremental Pike Frontend)
> foreach(({`/, `^});; function op) write("%O\n", op);
> void a() { foreach(({`/, `^});; function op); }
> a();
Compiler Error: 1: Undefined identifier a.
Compiler Error: 1: Calling a void expression.
>
Notera att det inte blev någon utskrift och att "a" inte blev
definierad. I 8.0:
Pike v8.0 release 1738 running Hilfe v3.5 (Incremental Pike Frontend)
> foreach(({`/, `^});; function op) write("%O\n", op);
`/
`^
Ok.
> void a() { foreach(({`/, `^});; function op); }
> a();
Compiler Warning: 1: Returning a void expression. Converted to zero.
(1) Result: 0
>
Känns som att det kanske hade varit trevligt att få någon indikation
på att något gick fel?
(25574467) /Marcus Comstedt (ACROSS) (Hail Ilpalazzo!)/