xref: /aosp_15_r20/external/clang/test/Parser/cxx-extra-semi.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -pedantic -verify -DPEDANTIC %s
2*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -Wextra-semi -verify %s
3*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -Wextra-semi -verify -std=c++11 %s
4*67e74705SXin Li // RUN: cp %s %t
5*67e74705SXin Li // RUN: %clang_cc1 -x c++ -Wextra-semi -fixit %t
6*67e74705SXin Li // RUN: %clang_cc1 -x c++ -Wextra-semi -Werror %t
7*67e74705SXin Li 
8*67e74705SXin Li class A {
9*67e74705SXin Li   void A1();
A2()10*67e74705SXin Li   void A2() { };
11*67e74705SXin Li #ifndef PEDANTIC
12*67e74705SXin Li   // This warning is only produced if we specify -Wextra-semi, and not if only
13*67e74705SXin Li   // -pedantic is specified, since one semicolon is technically permitted.
14*67e74705SXin Li   // expected-warning@-4{{extra ';' after member function definition}}
15*67e74705SXin Li #endif
A2b()16*67e74705SXin Li   void A2b() { };; // expected-warning{{extra ';' after member function definition}}
17*67e74705SXin Li   ; // expected-warning{{extra ';' inside a class}}
A2c()18*67e74705SXin Li   void A2c() { }
19*67e74705SXin Li   ;
20*67e74705SXin Li #ifndef PEDANTIC
21*67e74705SXin Li   // expected-warning@-2{{extra ';' after member function definition}}
22*67e74705SXin Li #endif
A3()23*67e74705SXin Li   void A3() { };  ;; // expected-warning{{extra ';' after member function definition}}
24*67e74705SXin Li   ;;;;;;; // expected-warning{{extra ';' inside a class}}
25*67e74705SXin Li   ; // expected-warning{{extra ';' inside a class}}
26*67e74705SXin Li   ; ;;		 ;  ;;; // expected-warning{{extra ';' inside a class}}
27*67e74705SXin Li     ;  ; 	;	;  ;; // expected-warning{{extra ';' inside a class}}
28*67e74705SXin Li   void A4();
29*67e74705SXin Li };
30*67e74705SXin Li 
31*67e74705SXin Li union B {
32*67e74705SXin Li   int a1;
33*67e74705SXin Li   int a2;; // expected-warning{{extra ';' inside a union}}
34*67e74705SXin Li };
35*67e74705SXin Li 
36*67e74705SXin Li ;
37*67e74705SXin Li ; ;;
38*67e74705SXin Li #if __cplusplus < 201103L
39*67e74705SXin Li // expected-warning@-3{{extra ';' outside of a function is a C++11 extension}}
40*67e74705SXin Li // expected-warning@-3{{extra ';' outside of a function is a C++11 extension}}
41*67e74705SXin Li #endif
42