<div dir="ltr"><div>Hello Clang,</div><div><br></div><div>I have noticed that when the compiler emits aliases for simple constructors and destructors it does not transfer the 'dllexport' storage class attribute to the alias.</div><div>Because in the source code there is only "the constructor" and the user cannot differentiate between the C1 and C2 portions of it, if one portion is dllexport'ed then the other must be too. At the moment however C1 is aliased to C2, and the alias does not have 'dllexport'. This can cause link errors. The same is true for the destructor (and its D1 and D2 portions).</div><div><br></div><div>The attached patch fixed the issue, although I am not 100% sure that my change is in the right place.<br></div><div>Rafael's refactor in r217847 means that the same code has to exist in two places: TryEmitDefinitionAsAlias() in CGCXX.cpp and emitConstructorDestructorAlias() in ItaniumCXXABI.cpp.</div><div>Maybe there's a better place where to put the change...</div><div><br></div><div>Also, my test assumes that C1 is aliased to C2 (and D1 to D2), and I have checked it's true with the provided triple which exercises the Itanium ABI code, but I cannot seem to get the "x86_64-windows-msvc" triple to create aliases for C1 and D1, so I don't have coverage for the code in TryEmitDefinitionAsAlias.</div><div>Can anybody provide advice on that? Or should I just fix the issue in the Itanium ABI and worry about the msvc ABI later? It would seem a shame not to fix both cases...</div><div><br></div><div>Cheers,</div><div>    Dario Domizioli</div><div>    SN Systems - Sony Computer Entertainment Group</div><div><br></div><div><br></div></div>