1eab9d6f9065b042d39fbaf9842c9d8cc968dd6d0Richard Smith// RUN: %clang_cc1 -fsyntax-only -pedantic -verify -DPEDANTIC %s
24b0e6f1da341510c1ad83eaf4c836f3134d0156aRichard Trieu// RUN: %clang_cc1 -fsyntax-only -Wextra-semi -verify %s
3eab9d6f9065b042d39fbaf9842c9d8cc968dd6d0Richard Smith// RUN: %clang_cc1 -fsyntax-only -Wextra-semi -verify -std=c++11 %s
44b0e6f1da341510c1ad83eaf4c836f3134d0156aRichard Trieu// RUN: cp %s %t
54b0e6f1da341510c1ad83eaf4c836f3134d0156aRichard Trieu// RUN: %clang_cc1 -x c++ -Wextra-semi -fixit %t
64b0e6f1da341510c1ad83eaf4c836f3134d0156aRichard Trieu// RUN: %clang_cc1 -x c++ -Wextra-semi -Werror %t
74b0e6f1da341510c1ad83eaf4c836f3134d0156aRichard Trieu
84b0e6f1da341510c1ad83eaf4c836f3134d0156aRichard Trieuclass A {
94b0e6f1da341510c1ad83eaf4c836f3134d0156aRichard Trieu  void A1();
10eab9d6f9065b042d39fbaf9842c9d8cc968dd6d0Richard Smith  void A2() { };
11eab9d6f9065b042d39fbaf9842c9d8cc968dd6d0Richard Smith#ifndef PEDANTIC
12eab9d6f9065b042d39fbaf9842c9d8cc968dd6d0Richard Smith  // This warning is only produced if we specify -Wextra-semi, and not if only
13eab9d6f9065b042d39fbaf9842c9d8cc968dd6d0Richard Smith  // -pedantic is specified, since one semicolon is technically permitted.
14eab9d6f9065b042d39fbaf9842c9d8cc968dd6d0Richard Smith  // expected-warning@-4{{extra ';' after member function definition}}
15eab9d6f9065b042d39fbaf9842c9d8cc968dd6d0Richard Smith#endif
16eab9d6f9065b042d39fbaf9842c9d8cc968dd6d0Richard Smith  void A2b() { };; // expected-warning{{extra ';' after member function definition}}
174b0e6f1da341510c1ad83eaf4c836f3134d0156aRichard Trieu  ; // expected-warning{{extra ';' inside a class}}
18eab9d6f9065b042d39fbaf9842c9d8cc968dd6d0Richard Smith  void A2c() { }
19eab9d6f9065b042d39fbaf9842c9d8cc968dd6d0Richard Smith  ;
20eab9d6f9065b042d39fbaf9842c9d8cc968dd6d0Richard Smith#ifndef PEDANTIC
21eab9d6f9065b042d39fbaf9842c9d8cc968dd6d0Richard Smith  // expected-warning@-2{{extra ';' after member function definition}}
22eab9d6f9065b042d39fbaf9842c9d8cc968dd6d0Richard Smith#endif
23eab9d6f9065b042d39fbaf9842c9d8cc968dd6d0Richard Smith  void A3() { };  ;; // expected-warning{{extra ';' after member function definition}}
244b0e6f1da341510c1ad83eaf4c836f3134d0156aRichard Trieu  ;;;;;;; // expected-warning{{extra ';' inside a class}}
254b0e6f1da341510c1ad83eaf4c836f3134d0156aRichard Trieu  ; // expected-warning{{extra ';' inside a class}}
264b0e6f1da341510c1ad83eaf4c836f3134d0156aRichard Trieu  ; ;;		 ;  ;;; // expected-warning{{extra ';' inside a class}}
274b0e6f1da341510c1ad83eaf4c836f3134d0156aRichard Trieu    ;  ; 	;	;  ;; // expected-warning{{extra ';' inside a class}}
284b0e6f1da341510c1ad83eaf4c836f3134d0156aRichard Trieu  void A4();
294b0e6f1da341510c1ad83eaf4c836f3134d0156aRichard Trieu};
304b0e6f1da341510c1ad83eaf4c836f3134d0156aRichard Trieu
314b0e6f1da341510c1ad83eaf4c836f3134d0156aRichard Trieuunion B {
324b0e6f1da341510c1ad83eaf4c836f3134d0156aRichard Trieu  int a1;
334b0e6f1da341510c1ad83eaf4c836f3134d0156aRichard Trieu  int a2;; // expected-warning{{extra ';' inside a union}}
344b0e6f1da341510c1ad83eaf4c836f3134d0156aRichard Trieu};
354b0e6f1da341510c1ad83eaf4c836f3134d0156aRichard Trieu
36eab9d6f9065b042d39fbaf9842c9d8cc968dd6d0Richard Smith;
37eab9d6f9065b042d39fbaf9842c9d8cc968dd6d0Richard Smith; ;;
38eab9d6f9065b042d39fbaf9842c9d8cc968dd6d0Richard Smith#if __cplusplus < 201103L
39eab9d6f9065b042d39fbaf9842c9d8cc968dd6d0Richard Smith// expected-warning@-3{{extra ';' outside of a function is a C++11 extension}}
40eab9d6f9065b042d39fbaf9842c9d8cc968dd6d0Richard Smith// expected-warning@-3{{extra ';' outside of a function is a C++11 extension}}
41eab9d6f9065b042d39fbaf9842c9d8cc968dd6d0Richard Smith#endif
42