[clang-tools-extra] [clangd] Resolve the dependent type from its single instantiation. Take 1 (PR #71279)
Younan Zhang via cfe-commits
cfe-commits at lists.llvm.org
Sun Dec 24 02:37:47 PST 2023
zyn0217 wrote:
Another issue I've encountered while at it is that, given the following code,
```cpp
void foo();
auto lambda = [] {
return ^foo();
};
```
let `N` represent the selection node for the expression `foo()`, `N.getDeclContext()` then yields `TranslationUnitDecl` rather than the `CXXRecordDecl`of the lambda expression.
I presume there's something wrong at `SelectionTree::Node::getDeclContext()`, because lambda expressions would slip through the current traversal logic.
```txt
`-LambdaExpr <col:15, line:4:1> '(lambda at line:2:15)' <-- parent 3; not a Decl thus ignored!
|-CXXRecordDecl <line:2:15> col:15 implicit class definition
| |-DefinitionData
| | |-DefaultConstructor
| | |-CopyConstructor
| | |-MoveConstructor
| | |-CopyAssignment
| | |-MoveAssignment
| | `-Destructor
| |-CXXMethodDecl <col:16, line:4:1> line:2:15 constexpr operator() 'auto () const -> void' inline
| | `-CompoundStmt <col:18, line:4:1>
| | `-ReturnStmt <line:3:3, col:14>
| | `-CallExpr <col:10, col:14> 'void'
| | `-ImplicitCastExpr <col:10> 'void (*)()' <FunctionToPointerDecay>
| | `-DeclRefExpr <col:10> 'void ()' lvalue Function 0xb76c1c8 'foo' 'void ()'
| |-CXXConversionDecl <line:2:15, line:4:1> line:2:15 implicit constexpr operator void (*)() 'auto (*() const noexcept)() -> void' inline
| |-CXXMethodDecl <col:15, line:4:1> line:2:15 implicit __invoke 'auto () -> void' static inline
| `-CXXDestructorDecl <col:15> col:15 implicit referenced constexpr ~(lambda at line:2:15) 'void () noexcept' inline default trivial
`-CompoundStmt <col:18, line:4:1> <--parent 2
`-ReturnStmt <line:3:3, col:14> <-- parent 1
`-CallExpr <col:10, col:14> 'void' <-- starting point
`-ImplicitCastExpr <col:10> 'void (*)()' <FunctionToPointerDecay>
`-DeclRefExpr <col:10> 'void ()' lvalue Function 0xb76c1c8 'foo' 'void ()'
```
https://github.com/llvm/llvm-project/blob/51b988efb06f0343e7b71c9aec9ec3195412179d/clang-tools-extra/clangd/Selection.cpp#L1107-L1118
https://github.com/llvm/llvm-project/pull/71279
More information about the cfe-commits
mailing list