[lldb] [clang] [clang][DebugInfo] Emit global variable definitions for static data members with constant initializers (PR #70639)

Michael Buch via cfe-commits cfe-commits at lists.llvm.org
Wed Nov 8 15:28:00 PST 2023


Michael137 wrote:

> This causes Clang to assert:
> 
> ```
>       llvm/lib/IR/Metadata.cpp:689:
>       void llvm::MDNode::resolve(): Assertion `isUniqued() && "Expected this to be uniqued"' failed.
> ```
> 
> See https://bugs.chromium.org/p/chromium/issues/detail?id=1500262#c1 for a reproducer.
> 
> I'll revert to green.

Thanks for the repro. Reduced it to:
```
struct Foo;                                                 
template <bool c> using Int = int;                          
class Bar {                                                 
  template <typename T> static const bool Constant = false; 
  Int<Constant<Foo>> Val;                                   
  Bar();                                                    
};                                                          
Bar::Bar() {}                                               
```
when compiling with `-debug-info-kind=limited`.

The issue was that `EmitGlobalVariable` can cause creation of `DINodes`, which, if using limited debug-info, will be temporary. But the emission of the global variables is done *after* we've uniqued the temporaries. So the fix is really to just do the `EmitGlobalVariable` at the beginning of `CGDebugInfo::finalize`. Will submit a new PR with that change and a new test-case for this

https://github.com/llvm/llvm-project/pull/70639


More information about the cfe-commits mailing list