[llvm-bugs] [Bug 44953] New: "Declaration may not be in a Comdat" when using D3DX12 headers and PCH files

via llvm-bugs llvm-bugs at lists.llvm.org
Tue Feb 18 10:36:54 PST 2020


https://bugs.llvm.org/show_bug.cgi?id=44953

            Bug ID: 44953
           Summary: "Declaration may not be in a Comdat" when using D3DX12
                    headers and PCH files
           Product: clang
           Version: trunk
          Hardware: PC
                OS: Windows NT
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: C++11
          Assignee: unassignedclangbugs at nondot.org
          Reporter: alexandre.ganea at ubisoft.com
                CC: blitzrakete at gmail.com, dgregor at apple.com,
                    erik.pilkington at gmail.com, hans at chromium.org,
                    llvm-bugs at lists.llvm.org, richard-llvm at metafoo.co.uk,
                    rnk at google.com

When including D3DX12 [1] headers in .PCH headers (/Yc), and using them in TUs
(/Yu), clang-cl fails with the following error:

        Declaration may not be in a Comdat!
        %struct.CD3DX12_DEFAULT* @"?D3D12_DEFAULT@@3UCD3DX12_DEFAULT@@B"
        fatal error: error in backend: Broken module found, compilation
aborted!
        Stack dump:
        0.      Program arguments: F:\llvm-project\build\bin\clang-cl.exe
/Yuprecomp.h a.cpp /c
        1.      <eof> parser at end of file
        2.      Per-function optimization
         #0 0x00007ffa8b5ba839 (C:\WINDOWS\System32\KERNELBASE.dll+0x3a839)
         #1 0x00007ff7690e5dda llvm::CrashRecoveryContext::HandleExit(int)
F:\llvm-project\llvm\lib\Support\CrashRecoveryContext.cpp:436:0
         #2 0x00007ff769129484 llvm::sys::Process::Exit(int)
F:\llvm-project\llvm\lib\Support\Process.cpp:95:0
         #3 0x00007ff7688982c9 LLVMErrorHandler
F:\llvm-project\clang\tools\driver\cc1_main.cpp:73:0
         #4 0x00007ff7690e60ea llvm::report_fatal_error(class llvm::Twine const
&, bool) F:\llvm-project\llvm\lib\Support\ErrorHandling.cpp:108:0
         #5 0x00007ff7690e6001 llvm::report_fatal_error(char const *, bool)
F:\llvm-project\llvm\lib\Support\ErrorHandling.cpp:83:0
         #6 0x00007ff769f2ff38 `anonymous
namespace'::VerifierLegacyPass::doFinalization
F:\llvm-project\llvm\lib\IR\Verifier.cpp:5189:0
         #7 0x00007ff768cda3af llvm::FPPassManager::doFinalization(class
llvm::Module &) F:\llvm-project\llvm\lib\IR\LegacyPassManager.cpp:1536:0
         #8 0x00007ff768cd96e0
llvm::legacy::FunctionPassManagerImpl::doFinalization(class llvm::Module &)
F:\llvm-project\llvm\lib\IR\LegacyPassManager.cpp:1382:0
         #9 0x00007ff76a3d11e1 clang::EmitBackendOutput(class
clang::DiagnosticsEngine &, class clang::HeaderSearchOptions const &, class
clang::CodeGenOptions const &, class clang::TargetOptions const &, class
clang::LangOptions const &, class llvm::DataLayout const &, class llvm::Module
*, enum clang::BackendAction, class std::unique_ptr<class
llvm::raw_pwrite_stream, struct std::default_delete<class
llvm::raw_pwrite_stream>>)
F:\llvm-project\clang\lib\CodeGen\BackendUtil.cpp:1582:0
        #10 0x00007ff76a75a4c6
clang::BackendConsumer::HandleTranslationUnit(class clang::ASTContext &)
F:\llvm-project\clang\lib\CodeGen\CodeGenAction.cpp:339:0
        #11 0x00007ff76c175c43 clang::ParseAST(class clang::Sema &, bool, bool)
F:\llvm-project\clang\lib\Parse\ParseAST.cpp:178:0
        #12 0x00007ff76a6b2edd clang::FrontendAction::Execute(void)
F:\llvm-project\clang\lib\Frontend\FrontendAction.cpp:944:0
        #13 0x00007ff76924e70b clang::CompilerInstance::ExecuteAction(class
clang::FrontendAction &)
F:\llvm-project\clang\lib\Frontend\CompilerInstance.cpp:969:0
        #14 0x00007ff7692b405d clang::ExecuteCompilerInvocation(class
clang::CompilerInstance *)
F:\llvm-project\clang\lib\FrontendTool\ExecuteCompilerInvocation.cpp:292:0
        #15 0x00007ff768897eda cc1_main(class llvm::ArrayRef<char const *>,
char const *, void *) F:\llvm-project\clang\tools\driver\cc1_main.cpp:240:0
        #16 0x00007ff768894f03 ExecuteCC1Tool
F:\llvm-project\clang\tools\driver\driver.cpp:328:0
        #17 0x00007ff76a4bb536 llvm::function_ref<void ()>::callback_fn<`lambda
at F:\llvm-project\clang\lib\Driver\Job.cpp:417:22'>
F:\llvm-project\llvm\include\llvm\ADT\STLExtras.h:108:0
        #18 0x00007ff7690e5c02 llvm::CrashRecoveryContext::RunSafely(class
llvm::function_ref<(void)>)
F:\llvm-project\llvm\lib\Support\CrashRecoveryContext.cpp:228:0
        #19 0x00007ff76a4bae04 clang::driver::CC1Command::Execute(class
llvm::ArrayRef<class llvm::Optional<class llvm::StringRef>>, class
std::basic_string<char, struct std::char_traits<char>, class
std::allocator<char>> *, bool *) const
F:\llvm-project\clang\lib\Driver\Job.cpp:417:0
        #20 0x00007ff76921411f clang::driver::Compilation::ExecuteCommand(class
clang::driver::Command const &, class clang::driver::Command const *&) const
F:\llvm-project\clang\lib\Driver\Compilation.cpp:182:0
        #21 0x00007ff769214489 clang::driver::Compilation::ExecuteJobs(class
clang::driver::JobList const &, class llvm::SmallVectorImpl<struct
std::pair<int, class clang::driver::Command const *>> &) const
F:\llvm-project\clang\lib\Driver\Compilation.cpp:233:0
        #22 0x00007ff769228ed7 clang::driver::Driver::ExecuteCompilation(class
clang::driver::Compilation &, class llvm::SmallVectorImpl<struct std::pair<int,
class clang::driver::Command const *>> &)
F:\llvm-project\clang\lib\Driver\Driver.cpp:1479:0
        #23 0x00007ff76889447e main
F:\llvm-project\clang\tools\driver\driver.cpp:496:0
        #24 0x00007ff76d477bd0 __scrt_common_main_seh
d:\agent\_work\5\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl:288:0
        #25 0x00007ffa8c407bd4 (C:\WINDOWS\System32\KERNEL32.DLL+0x17bd4)
        #26 0x00007ffa8db2ced1 (C:\WINDOWS\SYSTEM32\ntdll.dll+0x6ced1)
        clang-cl: error: clang frontend command failed with exit code 70 (use
-v to see invocation)

Reduced repro:

        // ---- precomp.h
        struct CD3DX12_DEFAULT {};
        extern const __declspec(selectany) CD3DX12_DEFAULT D3D12_DEFAULT;

        struct CD3DX12_CPU_DESCRIPTOR_HANDLE
        {
          CD3DX12_CPU_DESCRIPTOR_HANDLE(CD3DX12_DEFAULT) { ptr = 0; }
          size_t ptr;
        };

        // ---- precomp.cpp
        #include "precomp.h"

        // ---- a.cpp
        #include "precomp.h"

        int main() {
          CD3DX12_CPU_DESCRIPTOR_HANDLE desc =
CD3DX12_CPU_DESCRIPTOR_HANDLE(D3D12_DEFAULT);
          return desc.ptr;
        }

Compile with:

        $ clang-cl /Ycprecomp.h precomp.cpp /c
        $ clang-cl /Yuprecomp.h a.cpp /c
        (yields assert above)

I'm synced at 8b60ba73af401ed5a57427eaa235f7d798c72fc9.
Clang was built with -DLLVM_ENABLE_ASSERTIONS=ON.

[1]
https://github.com/microsoft/DirectX-Graphics-Samples/tree/master/Libraries/D3DX12

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20200218/a91a8e6c/attachment-0001.html>


More information about the llvm-bugs mailing list