Emit debug info for dynamic classes if they are imported from a DLL.
authorAdrian McCarthy <amccarth@google.com>
Tue, 16 Aug 2016 22:11:18 +0000 (22:11 +0000)
committerAdrian McCarthy <amccarth@google.com>
Tue, 16 Aug 2016 22:11:18 +0000 (22:11 +0000)
commit992429843b768381484abfc0bf7b2c3dc1984ae5
treed43fb0547979412997533209fa8b760821a2924f
parent744a8753dbe25ae314b7bfef758212f11d8839b1
Emit debug info for dynamic classes if they are imported from a DLL.

With -debug-info-kind=limited, we omit debug info for dynamic classes that live in other TUs. This reduces duplicate type information. When statically linked, the type information comes together. But if your binary has a class derived from a base in a DLL, the base class info is not available to the debugger.

The decision is made in shouldOmitDefinition (CGDebugInfo.cpp). Per a suggestion from rnk, I've tweaked the decision so that we do include definitions for classes marked as DLL imports. This should be a relatively small number of classes, so we don't pay a large price for duplication of the type info, yet it should cover most cases on Windows.

Essentially this makes debug info for DLLs independent, but we still assume that all TUs within the same DLL will be consistently built with (or without) debug info and the debugger will be able to search across the debug info within that scope to resolve any declarations into definitions, etc.

llvm-svn: 278861
clang/lib/CodeGen/CGDebugInfo.cpp
clang/test/CodeGenCXX/debug-info-dllimport-base-class.cpp [new file with mode: 0644]