diff options
Diffstat (limited to 'clang-tools-extra/clangd/unittests/SelectionTests.cpp')
| -rw-r--r-- | clang-tools-extra/clangd/unittests/SelectionTests.cpp | 13 | 
1 files changed, 13 insertions, 0 deletions
diff --git a/clang-tools-extra/clangd/unittests/SelectionTests.cpp b/clang-tools-extra/clangd/unittests/SelectionTests.cpp index 3df19d8..63c0403 100644 --- a/clang-tools-extra/clangd/unittests/SelectionTests.cpp +++ b/clang-tools-extra/clangd/unittests/SelectionTests.cpp @@ -311,6 +311,19 @@ TEST(SelectionTest, CommonAncestor) {        {"[[void foo^()]];", "FunctionProtoTypeLoc"},        {"[[^void foo^()]];", "FunctionDecl"},        {"[[void ^foo()]];", "FunctionDecl"}, +      // Tricky case: with function attributes, the AttributedTypeLoc's range +      // includes the function name, but we want the name to be associated with +      // the CXXMethodDecl. +      {"struct X { [[const int* ^Get() const <:[clang::lifetimebound]:> " +       "{return nullptr;}]]; };", +       "CXXMethodDecl"}, +      // When the cursor is on the attribute itself, we should select the +      // AttributedTypeLoc. Note: Due to a bug or deliberate quirk in the AST +      // modeling of AttributedTypeLoc, its range ends at the attribute name +      // token, not including the closing brackets ":>:>". +      {"struct X { const [[int* Foo() const <:<:clang::life^timebound]]:>:> " +       "{return nullptr;}; };", +       "AttributedTypeLoc"},        // Tricky case: two VarDecls share a specifier.        {"[[int ^a]], b;", "VarDecl"},        {"[[int a, ^b]];", "VarDecl"},  | 
