[Lldb-commits] [clang] [lldb] [clang][Expr] Teach IgnoreUnlessSpelledInSource about implicit calls to std::get free function (PR #122265)

Michael Buch via lldb-commits lldb-commits at lists.llvm.org
Thu Sep 4 03:24:51 PDT 2025


Michael137 wrote:

Latest commit narrows the heuristics so it specifically applies to `CallExpr`s generated for structured bindings. Here's what the AST looks like when stopped in `IgnoreImplicitCallSingleStep` for a structured binding:

```
(lldb) p E->dump()                                                                                                                                                                   
CallExpr 0x912dd6cb8 'int' adl                                                                                                                                                       
|-ImplicitCastExpr 0x912dd6ca0 'int (*)(triple)' <FunctionToPointerDecay>                                                                                                            
| `-DeclRefExpr 0x912dd6be8 'int (triple)' lvalue Function 0x912dbdb98 'get' 'int (triple)' (FunctionTemplate 0x912dbd990 'get')                                                     
`-CXXConstructExpr 0x912dd80e0 'triple' 'void (triple &&) noexcept'                                                                                                                  
  `-ImplicitCastExpr 0x912dd64b0 'std::triple' xvalue <NoOp>                                                                                                                         
    `-DeclRefExpr 0x912dd6490 'std::triple' lvalue Decomposition 0x912dd4f68 first_binding 'k' 'std::triple'                                                                         

(lldb) p A->dump()                                                                                                                                                                   
CXXConstructExpr 0x912dd80e0 'triple' 'void (triple &&) noexcept'                                                                                                                    
`-ImplicitCastExpr 0x912dd64b0 'std::triple' xvalue <NoOp>                                                                                                                           
  `-DeclRefExpr 0x912dd6490 'std::triple' lvalue Decomposition 0x912dd4f68 first_binding 'k' 'std::triple'                                                                           
```

What my latest change does is try and get to that `DeclRefExpr 0x912dd6490 'std::triple' lvalue Decomposition` node. And only for those cases ignore the `CallExpr`.

Let me know what you think @cor3ntin @AaronBallman. There might be a better way of doing this. Particularly, I wasn't sure how to unwrap the `DeclRefExpr`, so I just used `IgnoreUnlessSpelledInSource` again (recursively).

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


More information about the lldb-commits mailing list