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