[Issue 18238] New: Templates only used during CTFE shouldn't be code-gened

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sun Jan 14 22:11:53 UTC 2018


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

          Issue ID: 18238
           Summary: Templates only used during CTFE shouldn't be
                    code-gened
           Product: D
           Version: D2
          Hardware: x86_64
                OS: All
            Status: NEW
          Severity: normal
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: greensunny12 at gmail.com

The string of `foo` shouldn't make it to the object file:

```
auto foo()()
{
    // shouldn't appear in the object file
    return "My super long long
        long long long long long long long long long long long long long long
long
        long long long long long long long long long long long long long long
long
        long long long long long long long long long long long long long long
long
        long long long long long long long long long long long long long long
long
        long long long long long long long long long long long long long long
long
        long long long long long long long long long long long long long long
long
        long long long long long long long long long long long long long long
long
        long long long long long long long long long long long long long long
long
        long long long long long long long long long long long long long long
long
        long long long long long long long long long long long long long long
long
        long long long long long long long long long long long long long long
long
        long long long long long long long long long long long long long long
long
        long long long long long long long long long long long long long long
long
        long long long long long long long long long long long long long long
long
        long long long long long long long long long long long long long long
long
        long long long long long long long long long long long long long long
long
        long long long long long long long long long long long long long long
long
        long long long long long long long long long long long long long long
long
        string";
}

void main(string[] args)
{
    import core.stdc.stdio;
    static immutable s = foo()[0..2];
    printf("%.*s", 2, s.ptr);
}
```


```
.text._D3foo__TQhZQkFNaNbNiNfZAya       segment
        assume  CS:.text._D3foo__TQhZQkFNaNbNiNfZAya
_D3foo__TQhZQkFNaNbNiNfZAya:
                push    RBP
                mov     RBP,RSP
                lea     RDX,_TMP0 at PC32[RIP]
                mov     EAX,05F7h
                pop     RBP
                ret
                add     [RAX],AL
.text._D3foo__TQhZQkFNaNbNiNfZAya       ends
minfo   segment
        dd      offset FLAT:_D3foo12__ModuleInfoZ at 64
        db      000h,000h,000h,000h     ;....
minfo   ends
```



```
> cat foo.o | grep -a "long"
:
 ;I at Digital Mars D v2.078.0foo.d/home/seb/dlang/dmd/srcfoounsigned
longchaq_Array_charlength`#ptry_D3foo4mainFAAyaZ1syAa~      
~_Array_ucentlength`#ptrÏ#    9D main_DmaiargsÔ`
foo.foo!().foo_D3foo__TQhZQkFNaNbNiNfZAya~9ÿ_Dmain9_D3foo__TQhZQkFNaNbNiNfZAya5MyMy
super long long
        long long long long long long long long long long long long long long
long
^[[?1;2c        long long long long long long long long long long long long
long long long
```

--


More information about the Digitalmars-d-bugs mailing list