On 22/09/2021 18:21, Reid Kleckner via cfe-users wrote:
Looking back in the thread, I found the example code, and I see that MSVC refuses to inline this helper, but clang will inline it. I believe clang is permitted to inline it, MSVC will export the static data member (_the_keyboard), so everything should work as long as you provide a definition of _the_keyboard in the DLL and set -DBUILDING_DLL.


Thanks for coming in on this, Reid. As Jeff suggested, I transferred the question to llvm-dev where there's a small discussion going on now. I must admit though, my personal view is that declaring something as __declspec(dllimport) should automatically exclude it from being inlined (I'm pretty sure that's what Microsoft itself does...)

Ultimately, the main advantage of a DLL is that it offers dynamic linkage. In other words, DLL features can be updated simply by updating the DLL (i.e. without needing to update all the apps which use it). In the dim old days this could lead to something called "DLL Hell" but WinSxS has largely consigned that to history now. So whilst inlining code from a DLL might seem like a good idea, it throws away the main advantage of DLL's without offering anything better.

Over on llvm-dev I'm trying to persuade them that declaring something as __declspec(dllimport) should automatically exclude it from being inlined. And to be honest, I'd be quite surprised if that's not what Microsoft intended.

John
_______________________________________________
cfe-users mailing list
cfe-users@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users

Reply via email to