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