Author: Nathan Ridge Date: 2020-08-04T02:52:01-04:00 New Revision: 4ede3968498174f35f8456cd4bf95d14811d40d1
URL: https://github.com/llvm/llvm-project/commit/4ede3968498174f35f8456cd4bf95d14811d40d1 DIFF: https://github.com/llvm/llvm-project/commit/4ede3968498174f35f8456cd4bf95d14811d40d1.diff LOG: [clang] Include trailing-requires-clause in FunctionDecl's source range Fixes https://github.com/clangd/clangd/issues/476 Differential Revision: https://reviews.llvm.org/D85108 Added: Modified: clang-tools-extra/clangd/unittests/FindTargetTests.cpp clang/include/clang/Sema/DeclSpec.h clang/test/AST/ast-dump-concepts.cpp Removed: ################################################################################ diff --git a/clang-tools-extra/clangd/unittests/FindTargetTests.cpp b/clang-tools-extra/clangd/unittests/FindTargetTests.cpp index 8b872d6314d4..3421b9cec2d3 100644 --- a/clang-tools-extra/clangd/unittests/FindTargetTests.cpp +++ b/clang-tools-extra/clangd/unittests/FindTargetTests.cpp @@ -405,6 +405,11 @@ TEST_F(TargetDeclTest, ClassTemplate) { } TEST_F(TargetDeclTest, Concept) { + Flags.push_back("-std=c++20"); + + // FIXME: Should we truncate the pretty-printed form of a concept decl + // somewhere? + Code = R"cpp( template <typename T> concept Fooable = requires (T t) { t.foo(); }; @@ -414,12 +419,20 @@ TEST_F(TargetDeclTest, Concept) { t.foo(); } )cpp"; - Flags.push_back("-std=c++20"); EXPECT_DECLS( "ConceptSpecializationExpr", - // FIXME: Should we truncate the pretty-printed form of a concept decl - // somewhere? {"template <typename T> concept Fooable = requires (T t) { t.foo(); };"}); + + // trailing requires clause + Code = R"cpp( + template <typename T> + concept Fooable = true; + + template <typename T> + void foo() requires [[Fooable]]<T>; + )cpp"; + EXPECT_DECLS("ConceptSpecializationExpr", + {"template <typename T> concept Fooable = true;"}); } TEST_F(TargetDeclTest, FunctionTemplate) { diff --git a/clang/include/clang/Sema/DeclSpec.h b/clang/include/clang/Sema/DeclSpec.h index 0a22b5af7c64..93a912609655 100644 --- a/clang/include/clang/Sema/DeclSpec.h +++ b/clang/include/clang/Sema/DeclSpec.h @@ -2448,6 +2448,8 @@ class Declarator { /// \brief Sets a trailing requires clause for this declarator. void setTrailingRequiresClause(Expr *TRC) { TrailingRequiresClause = TRC; + + SetRangeEnd(TRC->getEndLoc()); } /// \brief Sets a trailing requires clause for this declarator. diff --git a/clang/test/AST/ast-dump-concepts.cpp b/clang/test/AST/ast-dump-concepts.cpp index 3429fa6b46be..7050ee0fb449 100644 --- a/clang/test/AST/ast-dump-concepts.cpp +++ b/clang/test/AST/ast-dump-concepts.cpp @@ -24,4 +24,13 @@ struct Foo { // CHECK-NEXT: `-ConceptSpecializationExpr {{.*}} <col:13> 'bool' template <unary_concept R> Foo(R); + + // CHECK: FunctionTemplateDecl {{.*}} <line:29:3, line:30:39> {{.*}} Foo<T> + template <typename R> + Foo(R, int) requires unary_concept<R>; + + // CHECK: FunctionTemplateDecl {{.*}} <line:33:3, line:35:3> {{.*}} Foo<T> + template <typename R> + Foo(R, char) requires unary_concept<R> { + } }; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits