zahiraam added a comment.

In D117569#3259928 <https://reviews.llvm.org/D117569#3259928>, @majnemer wrote:

> Your example is different from mine as it nests the constexpr variable inside 
> the function rather than having it at translation-unit scope.

And I suppose we are interested in the latter?

In D117569#3259928 <https://reviews.llvm.org/D117569#3259928>, @majnemer wrote:

> Your example is different from mine as it nests the constexpr variable inside 
> the function rather than having it at translation-unit scope.

Aargh! Getting lots of link errors with various tests I tried.
Tried this:
dll.cpp:
__declspec(dllexport) int& get() {

  extern int __declspec(dllimport) dll_import_int;
  constexpr int& dll_import_constexpr_ref = dll_import_int;
  
  return dll_import_constexpr_ref;

}

testapp.cpp:
extern int& __declspec(dllimport) get();

int main() {

  get();
  
  return 0;

}

$ cl dll.cpp /LD /EHsc
Microsoft (R) C/C++ Optimizing Compiler Version 19.29.30133 for x64
Copyright (C) Microsoft Corporation.  All rights reserved.

dll.cpp
Microsoft (R) Incremental Linker Version 14.29.30133.0
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:dll.dll
/dll
/implib:dll.lib
dll.obj

  Creating library dll.lib and object dll.exp

dll.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) int 
dll_import_int" (__imp_?dll_import_int@@3HA) referenced in function "int & 
__cdecl get(void)" (?get@@YAAEAHXZ)
dll.dll : fatal error LNK1120: 1 unresolved externals
$
Can't seem to find the right combination to find the potential bug!

Would that be enough to show that there is a MS bug?

extern int __declspec(dllimport) dll_import_int;
constexpr int& dll_import_constexpr_ref = dll_import_int;

int f() { return dll_import_constexpr_ref; }
int main() { return f(); }

Compiled with clang:
$ dumpbin /symbols a.o | grep dll
010 00000000 UNDEF  notype       External     | __imp_?dll_import_int@@3HA 
(__declspec(dllimport) int dll_import_int)
012 00000000 SECT5  notype       External     | 
?dll_import_constexpr_ref@@3AEAHEA (int & dll_import_constexpr_ref)
013 00000000 UNDEF  notype       External     | ?dll_import_int@@3HA (int 
dll_import_int)

Compiled with MSVC:
$ dumpbin /symbols a.obj | grep dll
007 00000000 UNDEF  notype       External     | ?dll_import_int@@3HA (int 
dll_import_int)
015 00000000 SECT6  notype       Static       | 
?dll_import_constexpr_ref@@3AEAHEA (int & dll_import_constexpr_ref)
$


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

Reply via email to