zahiraam added a comment. In D137107#3906413 <https://reviews.llvm.org/D137107#3906413>, @mstorsjo wrote:
> In D137107#3905443 <https://reviews.llvm.org/D137107#3905443>, @zahiraam > wrote: > >> and the same assembly (load __imp_?val) (is that why you made the comment >> above?). And the test case runs. > > Yes, pretty much - the actual value of the address of `&val` isn't known at > compile time and it cannot be produced in a way to initialize e.g. static > memory, which I would believe that one can expect of constexpr. The runtime > linker that loads DLLs can't fix it so that the address is available as a > statically initialized data, but to use it it does require runtime code to > fetch the address. > >> Without constexpr the symbol generated is >> >> 0E 00000000 UNDEF notype External | __imp_?val@@3HA >> (__declspec(dllimport) int val) >> >> and the assembly generates a ‘load __imp_? Val’. Same than MSVC, but the >> test case fails to run. @rnk Shouldn't this run? > > Can you give the full exact repro for this case, without constexpr, which you > say fails to run - I tried to follow the instructions but for me it seems to > work just fine, without constexpr. Here is an even smaller test case. lib.cpp: __declspec(dllexport) int val=12; t1.cpp: int main () { extern int _declspec(dllimport) val; int& val_ref = val; return val; } $ clang.exe -LD lib.cpp (this will create a.lib and a.exp) $ clang.exe t1.cpp -la $ ./a.exe This will result in a popup message: "The application was unable to start correctly ..." With MSVC $ cl /LD lib.cpp (this will create lib.lib and lib.dll) $ cl t1.cpp /link lib.lib $ t1.exe $ echo $? 12 $ Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D137107/new/ https://reviews.llvm.org/D137107 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits