www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 18238] New: Templates only used during CTFE shouldn't be

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 puremagic.com
          Reporter: greensunny12 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 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 ``` --
Jan 14 2018