[cfe-dev] Exec compiled with clang-cl loads extra dlls when build

JVApen via cfe-dev cfe-dev at lists.llvm.org
Sat Nov 24 23:27:33 PST 2018


Hello all,

I'm working towards converting an MSVC application to compile and run with
Clang-cl.
Over the last years, we've make a lot of progress on this.
Today however, I'm facing a problem I don't understand and hope that you
will be able to help me with this.

When I build a single application from a monolithic code base, the
executable works. (Thanks a lot for all of the effort to allow this!)
However, if I build all of the executables (and extra dlls), the executable
crashes.
>From what I can tell, the problem is the following:
 - Exe starts
 - Dll_A gets loaded
 - Dll_A has a dependency on Dll_B
 - Dll_B gets loaded
 - Dll_B depends on Dll_A => Circular dependency

However, when building a single executable, Dll_B was not build and Dll_A
doesn't seem to depend on on Dll_B.

I've looked through this with dependency walker and found 2 reasons why
Dll_A depends on Dll_B:

Following code exists in the code of Dll_A
class I { virtual I *clone() const = 0; }
class EXPORT Impl { virtual Impl *clone() const { return new Impl{*this}; }

Dependency walker indicates that Dll_A contains:
   Impl *Impl::clone() const
It also indicates that Dll_B contains:
   I *Impl::clone() const
This last is a bit unexpected to me, however, covariance is not my
expertise.

I've updated the code to not use covariance just to test.
This again causes a circular dependency, because now a Dll_C (and depends
on Dll_B) contains following symbol where Dll_A depends on:
    std::allocator<char>::allocator<char>(std::allocator<char> const &)

I wouldn't even know how to update the MSVC STL, nor would I want to do so
as this is an external library.

Do you have any idea on what is causing this and how to get started on
creating a reproduction for this? (And no, I unfortunately can't use
CReduce)

JVApen
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20181125/a31eae47/attachment.html>


More information about the cfe-dev mailing list