summaryrefslogtreecommitdiffstats
path: root/clang/unittests/AST/SourceLocationTest.cpp
diff options
context:
space:
mode:
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