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: nob...@puremagic.com
          Reporter: greensunn...@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@PC32[RIP]
                mov     EAX,05F7h
                pop     RBP
                ret
                add     [RAX],AL
.text._D3foo__TQhZQkFNaNbNiNfZAya       ends
minfo   segment
        dd      offset FLAT:_D3foo12__ModuleInfoZ@64
        db      000h,000h,000h,000h     ;....
minfo   ends
```



```
> cat foo.o | grep -a "long"
:
 ;I@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
```

--

Reply via email to