[Issue 20565] New: Local template function in static foreach yields link error LNK1179 on fresh compile
    d-bugmail at puremagic.com 
    d-bugmail at puremagic.com
       
    Fri Feb  7 12:09:57 UTC 2020
    
    
  
https://issues.dlang.org/show_bug.cgi?id=20565
          Issue ID: 20565
           Summary: Local template function in static foreach yields link
                    error LNK1179 on fresh compile
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Windows
            Status: NEW
          Severity: major
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: simon.vanbernem at yahoo.de
Minimized Repro:
//--------------------------------------
struct A_Attributes{
        int attr;
}
struct A{
        @A_Attributes(2)
        int a;
        @A_Attributes(2)
        int b;
}
import std.traits, core.stdc.stdio;
void main(){
        static foreach(string field_name; FieldNameTuple!A){{
                alias member = __traits(getMember, A, field_name);
                void temp(Attribute_Type)(){ printf("hello"); }
                static if(hasUDA!(member, A_Attributes)){{ temp!A_Attributes();
}}
        }}
}
//--------------------------------------
Compiling this with DMD32 D Compiler v2.087.0 will yield the following error:
test.obj : fatal error LNK1179: Ungültige oder beschädigte Datei: COMDAT
"_D4test4mainFZ__T4tempTSQw12A_AttributesZQyMFNbNiZv" doppelt vorhanden.
Error: linker exited with status 1179
(The german means: "invalid or corrupt file: COMDAT -mangled- exists twice")
It gets even weirder: If you comment out one of the lines that say
"@A_Attributes(2)" it compiles. If you then uncomment that line again, the code
still compiles. No link error. The link error reappears as soon as I delete the
files that were built.
--
    
    
More information about the Digitalmars-d-bugs
mailing list