summaryrefslogtreecommitdiffstats
path: root/clang/unittests/AST/SourceLocationTest.cpp
diff options
context:
space:
mode:
authorNicolas Manichon <nmanichon@gmail.com>2019-12-03 08:21:55 -0500
committerAaron Ballman <aaron@aaronballman.com>2019-12-03 08:21:55 -0500
commitcc3c935da24c8ebe4fd92638574462b762d92335 (patch)
treec3f8b9c35bf243a3b4e0e6f262a5e9d9f51f0a28 /clang/unittests/AST/SourceLocationTest.cpp
parentaedeab7f85caaa0946152e5d73e37455267019bb (diff)
downloadbcm5719-llvm-cc3c935da24c8ebe4fd92638574462b762d92335.tar.gz
bcm5719-llvm-cc3c935da24c8ebe4fd92638574462b762d92335.zip
Add FunctionDecl::getParameterSourceRange()
This source range covers the list of parameters of the function declaration, including the ellipsis for a variadic function.
Diffstat (limited to 'clang/unittests/AST/SourceLocationTest.cpp')
-rw-r--r--clang/unittests/AST/SourceLocationTest.cpp106
1 files changed, 106 insertions, 0 deletions
diff --git a/clang/unittests/AST/SourceLocationTest.cpp b/clang/unittests/AST/SourceLocationTest.cpp
index 6b4dddc3850..d104497974f 100644
--- a/clang/unittests/AST/SourceLocationTest.cpp
+++ b/clang/unittests/AST/SourceLocationTest.cpp
@@ -648,6 +648,112 @@ TEST(FunctionDecl, FunctionDeclWithNoExceptSpecification) {
Language::Lang_CXX11));
}
+class FunctionDeclParametersRangeVerifier : public RangeVerifier<FunctionDecl> {
+protected:
+ SourceRange getRange(const FunctionDecl &Function) override {
+ return Function.getParametersSourceRange();
+ }
+};
+
+TEST(FunctionDeclParameters, FunctionDeclOnlyVariadic) {
+ FunctionDeclParametersRangeVerifier Verifier;
+ Verifier.expectRange(1, 8, 1, 8);
+ EXPECT_TRUE(Verifier.match("void f(...);\n", functionDecl()));
+}
+
+TEST(FunctionDeclParameters, FunctionDeclVariadic) {
+ FunctionDeclParametersRangeVerifier Verifier;
+ Verifier.expectRange(1, 8, 1, 15);
+ EXPECT_TRUE(Verifier.match("void f(int a, ...);\n", functionDecl()));
+}
+
+TEST(FunctionDeclParameters, FunctionDeclMacroVariadic) {
+ FunctionDeclParametersRangeVerifier Verifier;
+ Verifier.expectRange(2, 8, 1, 18);
+ EXPECT_TRUE(Verifier.match("#define VARIADIC ...\n"
+ "void f(int a, VARIADIC);\n",
+ functionDecl()));
+}
+
+TEST(FunctionDeclParameters, FunctionDeclMacroParams) {
+ FunctionDeclParametersRangeVerifier Verifier;
+ Verifier.expectRange(1, 16, 2, 20);
+ EXPECT_TRUE(Verifier.match("#define PARAMS int a, int b\n"
+ "void f(PARAMS, int c);",
+ functionDecl()));
+}
+
+TEST(FunctionDeclParameters, FunctionDeclSingleParameter) {
+ FunctionDeclParametersRangeVerifier Verifier;
+ Verifier.expectRange(1, 8, 1, 12);
+ EXPECT_TRUE(Verifier.match("void f(int a);\n", functionDecl()));
+}
+
+TEST(FunctionDeclParameters, MemberFunctionDecl) {
+ FunctionDeclParametersRangeVerifier Verifier;
+ Verifier.expectRange(2, 8, 2, 12);
+ EXPECT_TRUE(Verifier.match("class A{\n"
+ "void f(int a);\n"
+ "};",
+ functionDecl()));
+}
+
+TEST(FunctionDeclParameters, MemberFunctionDeclVariadic) {
+ FunctionDeclParametersRangeVerifier Verifier;
+ Verifier.expectRange(2, 8, 2, 15);
+ EXPECT_TRUE(Verifier.match("class A{\n"
+ "void f(int a, ...);\n"
+ "};",
+ functionDecl()));
+}
+
+TEST(FunctionDeclParameters, StaticFunctionDecl) {
+ FunctionDeclParametersRangeVerifier Verifier;
+ Verifier.expectRange(2, 15, 2, 19);
+ EXPECT_TRUE(Verifier.match("class A{\n"
+ "static void f(int a);\n"
+ "};",
+ functionDecl()));
+}
+
+TEST(FunctionDeclParameters, FunctionDeclMultipleParameters) {
+ FunctionDeclParametersRangeVerifier Verifier;
+ Verifier.expectRange(1, 8, 1, 28);
+ EXPECT_TRUE(
+ Verifier.match("void f(int a, int b, char *c);\n", functionDecl()));
+}
+
+TEST(FunctionDeclParameters, FunctionDeclWithDefaultValue) {
+ FunctionDeclParametersRangeVerifier Verifier;
+ Verifier.expectRange(1, 8, 1, 16);
+ EXPECT_TRUE(Verifier.match("void f(int a = 5);\n", functionDecl()));
+}
+
+TEST(FunctionDeclParameters, FunctionDeclWithVolatile) {
+ FunctionDeclParametersRangeVerifier Verifier;
+ Verifier.expectRange(1, 8, 1, 22);
+ EXPECT_TRUE(Verifier.match("void f(volatile int *i);", functionDecl()));
+}
+
+TEST(FunctionDeclParameters, FunctionDeclWithConstParam) {
+ FunctionDeclParametersRangeVerifier Verifier;
+ Verifier.expectRange(1, 8, 1, 19);
+ EXPECT_TRUE(Verifier.match("void f(const int *i);", functionDecl()));
+}
+
+TEST(FunctionDeclParameters, FunctionDeclWithConstVolatileParam) {
+ FunctionDeclParametersRangeVerifier Verifier;
+ Verifier.expectRange(1, 8, 1, 28);
+ EXPECT_TRUE(Verifier.match("void f(const volatile int *i);", functionDecl()));
+}
+
+TEST(FunctionDeclParameters, FunctionDeclWithParamAttribute) {
+ FunctionDeclParametersRangeVerifier Verifier;
+ Verifier.expectRange(1, 8, 1, 36);
+ EXPECT_TRUE(Verifier.match("void f(__attribute__((unused)) int a) {}",
+ functionDecl()));
+}
+
TEST(CXXMethodDecl, CXXMethodDeclWithThrowSpecification) {
RangeVerifier<FunctionDecl> Verifier;
Verifier.expectRange(2, 1, 2, 16);
OpenPOWER on IntegriCloud