@@ -648,6 +648,112 @@ TEST(FunctionDecl, FunctionDeclWithNoExceptSpecification) {
648648 Language::Lang_CXX11));
649649}
650650
651+ class FunctionDeclParametersRangeVerifier : public RangeVerifier <FunctionDecl> {
652+ protected:
653+ SourceRange getRange (const FunctionDecl &Function) override {
654+ return Function.getParametersSourceRange ();
655+ }
656+ };
657+
658+ TEST (FunctionDeclParameters, FunctionDeclOnlyVariadic) {
659+ FunctionDeclParametersRangeVerifier Verifier;
660+ Verifier.expectRange (1 , 8 , 1 , 8 );
661+ EXPECT_TRUE (Verifier.match (" void f(...);\n " , functionDecl ()));
662+ }
663+
664+ TEST (FunctionDeclParameters, FunctionDeclVariadic) {
665+ FunctionDeclParametersRangeVerifier Verifier;
666+ Verifier.expectRange (1 , 8 , 1 , 15 );
667+ EXPECT_TRUE (Verifier.match (" void f(int a, ...);\n " , functionDecl ()));
668+ }
669+
670+ TEST (FunctionDeclParameters, FunctionDeclMacroVariadic) {
671+ FunctionDeclParametersRangeVerifier Verifier;
672+ Verifier.expectRange (2 , 8 , 1 , 18 );
673+ EXPECT_TRUE (Verifier.match (" #define VARIADIC ...\n "
674+ " void f(int a, VARIADIC);\n " ,
675+ functionDecl ()));
676+ }
677+
678+ TEST (FunctionDeclParameters, FunctionDeclMacroParams) {
679+ FunctionDeclParametersRangeVerifier Verifier;
680+ Verifier.expectRange (1 , 16 , 2 , 20 );
681+ EXPECT_TRUE (Verifier.match (" #define PARAMS int a, int b\n "
682+ " void f(PARAMS, int c);" ,
683+ functionDecl ()));
684+ }
685+
686+ TEST (FunctionDeclParameters, FunctionDeclSingleParameter) {
687+ FunctionDeclParametersRangeVerifier Verifier;
688+ Verifier.expectRange (1 , 8 , 1 , 12 );
689+ EXPECT_TRUE (Verifier.match (" void f(int a);\n " , functionDecl ()));
690+ }
691+
692+ TEST (FunctionDeclParameters, MemberFunctionDecl) {
693+ FunctionDeclParametersRangeVerifier Verifier;
694+ Verifier.expectRange (2 , 8 , 2 , 12 );
695+ EXPECT_TRUE (Verifier.match (" class A{\n "
696+ " void f(int a);\n "
697+ " };" ,
698+ functionDecl ()));
699+ }
700+
701+ TEST (FunctionDeclParameters, MemberFunctionDeclVariadic) {
702+ FunctionDeclParametersRangeVerifier Verifier;
703+ Verifier.expectRange (2 , 8 , 2 , 15 );
704+ EXPECT_TRUE (Verifier.match (" class A{\n "
705+ " void f(int a, ...);\n "
706+ " };" ,
707+ functionDecl ()));
708+ }
709+
710+ TEST (FunctionDeclParameters, StaticFunctionDecl) {
711+ FunctionDeclParametersRangeVerifier Verifier;
712+ Verifier.expectRange (2 , 15 , 2 , 19 );
713+ EXPECT_TRUE (Verifier.match (" class A{\n "
714+ " static void f(int a);\n "
715+ " };" ,
716+ functionDecl ()));
717+ }
718+
719+ TEST (FunctionDeclParameters, FunctionDeclMultipleParameters) {
720+ FunctionDeclParametersRangeVerifier Verifier;
721+ Verifier.expectRange (1 , 8 , 1 , 28 );
722+ EXPECT_TRUE (
723+ Verifier.match (" void f(int a, int b, char *c);\n " , functionDecl ()));
724+ }
725+
726+ TEST (FunctionDeclParameters, FunctionDeclWithDefaultValue) {
727+ FunctionDeclParametersRangeVerifier Verifier;
728+ Verifier.expectRange (1 , 8 , 1 , 16 );
729+ EXPECT_TRUE (Verifier.match (" void f(int a = 5);\n " , functionDecl ()));
730+ }
731+
732+ TEST (FunctionDeclParameters, FunctionDeclWithVolatile) {
733+ FunctionDeclParametersRangeVerifier Verifier;
734+ Verifier.expectRange (1 , 8 , 1 , 22 );
735+ EXPECT_TRUE (Verifier.match (" void f(volatile int *i);" , functionDecl ()));
736+ }
737+
738+ TEST (FunctionDeclParameters, FunctionDeclWithConstParam) {
739+ FunctionDeclParametersRangeVerifier Verifier;
740+ Verifier.expectRange (1 , 8 , 1 , 19 );
741+ EXPECT_TRUE (Verifier.match (" void f(const int *i);" , functionDecl ()));
742+ }
743+
744+ TEST (FunctionDeclParameters, FunctionDeclWithConstVolatileParam) {
745+ FunctionDeclParametersRangeVerifier Verifier;
746+ Verifier.expectRange (1 , 8 , 1 , 28 );
747+ EXPECT_TRUE (Verifier.match (" void f(const volatile int *i);" , functionDecl ()));
748+ }
749+
750+ TEST (FunctionDeclParameters, FunctionDeclWithParamAttribute) {
751+ FunctionDeclParametersRangeVerifier Verifier;
752+ Verifier.expectRange (1 , 8 , 1 , 36 );
753+ EXPECT_TRUE (Verifier.match (" void f(__attribute__((unused)) int a) {}" ,
754+ functionDecl ()));
755+ }
756+
651757TEST (CXXMethodDecl, CXXMethodDeclWithThrowSpecification) {
652758 RangeVerifier<FunctionDecl> Verifier;
653759 Verifier.expectRange (2 , 1 , 2 , 16 );
0 commit comments