zahiraam added a comment. In D117569#3262595 <https://reviews.llvm.org/D117569#3262595>, @zahiraam wrote:
> @majnemer > > I did take an example completely different with no use of the constexpr in > order to understand (at least for me) when the _imp prefix is generated with > CL. > This is sample.cpp: > #include<iostream> > > __declspec(dllexport) void PrintHello() > { > > std::cout << "hello" << std::endl; > > } > > $ cl sample.cpp /LD /EHsc > Microsoft (R) C/C++ Optimizing Compiler Version 19.16.27045 for x64 > Copyright (C) Microsoft Corporation. All rights reserved. > > sample.cpp > Microsoft (R) Incremental Linker Version 14.16.27045.0 > Copyright (C) Microsoft Corporation. All rights reserved. > > /out:sample.dll > /dll > /implib:sample.lib > sample.obj > > Creating library sample.lib and object sample.exp > > $ > This is testapp.cpp: > extern void __declspec(dllimport)PrintHello(); > > void main() > { > > PrintHello(); > > } > > $ cl testapp.cpp /EHsc /link sample.lib > Microsoft (R) C/C++ Optimizing Compiler Version 19.16.27045 for x64 > Copyright (C) Microsoft Corporation. All rights reserved. > > testapp.cpp > Microsoft (R) Incremental Linker Version 14.16.27045.0 > Copyright (C) Microsoft Corporation. All rights reserved. > > /out:testapp.exe > sample.lib > testapp.obj > $ > $ dumpbin /symbols testapp.obj | grep imp > 008 00000000 UNDEF notype External | __imp_?PrintHello@@YAXXZ > (__declspec(dllimport) void __cdecl PrintHello(void)) > $ > > My understanding that the _imp prefix is generated because of the dllimport > in testapp.cpp. > So if we go back to the test case above: > > extern int __declspec(dllimport) dll_import_int; > constexpr int& dll_import_constexpr_ref = dll_import_int; > int& get() { > > return dll_import_constexpr_ref; > > } > int main () { > > get(); > return 0; > > } > > CLANG (with this patch and ICL for that matter) generates the symbol: > > 011 00000000 UNDEF notype External | __imp_?dll_import_int@@3HA > (__declspec(dllimport) int dll_import_int) > > but not MSVC. This seems incorrect to me since the _imp prefix is always > generated for dllimport symbols? OTOH it does seem odd that clang is generating for the test case 2 UNDEF symbols. One with the _imp mangling and one without? CHANGES SINCE LAST ACTION https://reviews.llvm.org/D117569/new/ https://reviews.llvm.org/D117569 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits