[Issue 21473] New: DMD enters infinite loop

d-bugmail at puremagic.com d-bugmail at puremagic.com
Fri Dec 11 19:32:24 UTC 2020


https://issues.dlang.org/show_bug.cgi?id=21473

          Issue ID: 21473
           Summary: DMD enters infinite loop
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: blocker
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: doob at me.com

Compiling the following code with DMD 2.094.0 on macOS:

import std.algorithm.searching;
import std.stdio;
import std.meta;
import std.algorithm.sorting : sort;

void main()
{
    static immutable test = [
        "ια"w, "ιά", "ιο", "ιό", "ιε", "ιέ", "ιυ", "ιύ", "ιι", "ιί", "ιω",
"ιώ", "ιϊ", "ιΐ", "ιϋ", "ιΰ", "ιη", "ιή", "ιου", "ιού", "ιοι", "ιοί", "ιει",
"ιεί", "ιαι", "ιαί", "ιυι", "ιυί",
        "ηα", "ηά", "ηο", "ηό", "ηε", "ηέ", "ηυ", "ηύ", "ηι", "ηί", "ηω", "ηώ",
"ηϊ", "ηΐ", "ηϋ", "ηΰ", "ηη", "ηή", "ηου", "ηού", "ηοι", "ηοί", "ηει", "ηεί",
"ηαι", "ηαί", "ηυι", "ηυί",
        "υα", "υά", "υο", "υό", "υε", "υέ", "υυ", "υύ", "υι", "υί", "υω", "υώ",
"υϊ", "υΐ", "υϋ", "υΰ", "υη", "υή", "υου", "υού", "υοι", "υοί", "υει", "υεί",
"υαι", "υαί", "υυι", "υυί"
    ].sort!`a.length > b.length`().release();

    auto qaz = "οιιοιιοιιεεεείί"w.endsWith(aliasSeqOf!test);

    qaz.writeln;
}

Causes what might be an infinite loop. Eventually the compiler segfaults. This
is the backtrace from running inside a debugger:

* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS
(code=2, address=0x7ffeef3ffff8)
    frame #0: 0x00000001001f0d35 dmd`TemplateInstance::isDiscardable() + 5
dmd`TemplateInstance::isDiscardable:
->  0x1001f0d35 <+5>:  pushq  %r12
    0x1001f0d37 <+7>:  pushq  %rbx
    0x1001f0d38 <+8>:  movq   %rdi, %r14
    0x1001f0d3b <+11>: movq   0x120(%rdi), %rdi
Target 0: (dmd) stopped.
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS
(code=2, address=0x7ffeef3ffff8)
  * frame #0: 0x00000001001f0d35 dmd`TemplateInstance::isDiscardable() + 5
    frame #1: 0x0000000100018c99 dmd`TemplateInstance::needsCodegen() + 313
    frame #174658: 0x00000001000193af dmd`TemplateInstance::needsCodegen() +
2127
    frame #174659: 0x00000001000189da
dmd`toObjFile::ToObjFile::visit(TemplateInstance*) + 42
    frame #174660: 0x000000010003d28a dmd`genObjFile(Module*, bool) + 2186
    frame #174661: 0x000000010012b226
dmd`_D3dmd4mars7tryMainFmPPxaKSQz7globals5ParamZi + 8438
    frame #174662: 0x00000001001362df dmd`_Dmain + 31
    frame #174663: 0x00000001004df2b8
dmd`_D2rt6dmain212_d_run_main2UAAamPUQgZiZ6runAllMFZv + 120
    frame #174664: 0x00000001004df09f dmd`_d_run_main2 + 399
    frame #174665: 0x00000001004deefd dmd`_d_run_main + 141
    frame #174666: 0x00007fff6dc91cc9 libdyld.dylib`start + 1
    frame #174667: 0x00007fff6dc91cc9 libdyld.dylib`start + 1

dmd`TemplateInstance::needsCodegen() is repeated over 174000 times. I've
reduced the stacktrace above to save space.

Originally reported here for Windows:
https://forum.dlang.org/post/pwwlbsvjvrkatiiqguly@forum.dlang.org.

--


More information about the Digitalmars-d-bugs mailing list