1a0d5878b7e1c54551c0445354788e4259900c03cDavid Tweed// RUN: %clang_cc1 -verify -std=c++11 %s 2994d73f8473cb2cd3ce2f69c9575c95015be788aRichard Smith 3994d73f8473cb2cd3ce2f69c9575c95015be788aRichard Smith8gi///===--- recovery.cpp ---===// // expected-error {{unqualified-id}} 4994d73f8473cb2cd3ce2f69c9575c95015be788aRichard Smithnamespace Std { // expected-note {{here}} 5994d73f8473cb2cd3ce2f69c9575c95015be788aRichard Smith typedef int Important; 6994d73f8473cb2cd3ce2f69c9575c95015be788aRichard Smith} 7994d73f8473cb2cd3ce2f69c9575c95015be788aRichard Smith 8994d73f8473cb2cd3ce2f69c9575c95015be788aRichard Smith/ redeclare as an inline namespace // expected-error {{unqualified-id}} 9994d73f8473cb2cd3ce2f69c9575c95015be788aRichard Smithinline namespace Std { // expected-error {{cannot be reopened as inline}} 10994d73f8473cb2cd3ce2f69c9575c95015be788aRichard Smith Important n; 11994d73f8473cb2cd3ce2f69c9575c95015be788aRichard Smith} / end namespace Std // expected-error {{unqualified-id}} 12994d73f8473cb2cd3ce2f69c9575c95015be788aRichard Smithint x; 13994d73f8473cb2cd3ce2f69c9575c95015be788aRichard SmithStd::Important y; 14994d73f8473cb2cd3ce2f69c9575c95015be788aRichard Smith 152d67097ad41f4c2fe82ebce3f587e06498f1bd71Richard Smithextenr "C" { // expected-error {{did you mean 'extern'}} 16994d73f8473cb2cd3ce2f69c9575c95015be788aRichard Smith void f(); 17994d73f8473cb2cd3ce2f69c9575c95015be788aRichard Smith} 18994d73f8473cb2cd3ce2f69c9575c95015be788aRichard Smithvoid g() { 19994d73f8473cb2cd3ce2f69c9575c95015be788aRichard Smith z = 1; // expected-error {{undeclared}} 2050dc12ad05d4a3a57e83852756498afce4307a77Kaelyn Uhrain f(); 21994d73f8473cb2cd3ce2f69c9575c95015be788aRichard Smith} 22994d73f8473cb2cd3ce2f69c9575c95015be788aRichard Smith 23994d73f8473cb2cd3ce2f69c9575c95015be788aRichard Smithstruct S { 24994d73f8473cb2cd3ce2f69c9575c95015be788aRichard Smith int a, b, c; 25994d73f8473cb2cd3ce2f69c9575c95015be788aRichard Smith S(); 2653aec2a2770afc242c70fd88975cd0ea389087c0Richard Smith int x // expected-error {{expected ';'}} 2753aec2a2770afc242c70fd88975cd0ea389087c0Richard Smith friend void f() 28994d73f8473cb2cd3ce2f69c9575c95015be788aRichard Smith}; 29994d73f8473cb2cd3ce2f69c9575c95015be788aRichard Smith8S::S() : a{ 5 }, b{ 6 }, c{ 2 } { // expected-error {{unqualified-id}} 30994d73f8473cb2cd3ce2f69c9575c95015be788aRichard Smith return; 31994d73f8473cb2cd3ce2f69c9575c95015be788aRichard Smith} 32994d73f8473cb2cd3ce2f69c9575c95015be788aRichard Smithint k; 3353aec2a2770afc242c70fd88975cd0ea389087c0Richard Smithint l = k // expected-error {{expected ';'}} 3453aec2a2770afc242c70fd88975cd0ea389087c0Richard Smithconstexpr int foo(); 35994d73f8473cb2cd3ce2f69c9575c95015be788aRichard Smith 36994d73f8473cb2cd3ce2f69c9575c95015be788aRichard Smith5int m = { l }, n = m; // expected-error {{unqualified-id}} 37994d73f8473cb2cd3ce2f69c9575c95015be788aRichard Smith 38b310439121c875937d78cc49cc969bc1197fc025Richard Smithnamespace MissingBrace { 39b310439121c875937d78cc49cc969bc1197fc025Richard Smith struct S { // expected-error {{missing '}' at end of definition of 'MissingBrace::S'}} 40b310439121c875937d78cc49cc969bc1197fc025Richard Smith int f(); 41b310439121c875937d78cc49cc969bc1197fc025Richard Smith // }; 42b310439121c875937d78cc49cc969bc1197fc025Richard Smith 43b310439121c875937d78cc49cc969bc1197fc025Richard Smith namespace N { int g(); } // expected-note {{still within definition of 'MissingBrace::S' here}} 44b310439121c875937d78cc49cc969bc1197fc025Richard Smith 45b310439121c875937d78cc49cc969bc1197fc025Richard Smith int k1 = S().h(); // expected-error {{no member named 'h' in 'MissingBrace::S'}} 46b310439121c875937d78cc49cc969bc1197fc025Richard Smith int k2 = S().f() + N::g(); 477faf81ff1dc8f8dc724e928ba90ccbfad0fdc2bcRichard Smith 487faf81ff1dc8f8dc724e928ba90ccbfad0fdc2bcRichard Smith template<typename T> struct PR17949 { // expected-error {{missing '}' at end of definition of 'MissingBrace::PR17949'}} 497faf81ff1dc8f8dc724e928ba90ccbfad0fdc2bcRichard Smith 507faf81ff1dc8f8dc724e928ba90ccbfad0fdc2bcRichard Smith namespace X { // expected-note {{still within definition of 'MissingBrace::PR17949' here}} 517faf81ff1dc8f8dc724e928ba90ccbfad0fdc2bcRichard Smith } 52b310439121c875937d78cc49cc969bc1197fc025Richard Smith} 53b310439121c875937d78cc49cc969bc1197fc025Richard Smith 54994d73f8473cb2cd3ce2f69c9575c95015be788aRichard Smithnamespace N { 55994d73f8473cb2cd3ce2f69c9575c95015be788aRichard Smith int 56994d73f8473cb2cd3ce2f69c9575c95015be788aRichard Smith} // expected-error {{unqualified-id}} 57994d73f8473cb2cd3ce2f69c9575c95015be788aRichard Smith 582d67097ad41f4c2fe82ebce3f587e06498f1bd71Richard Smithstrcut Uuuu { // expected-error {{did you mean 'struct'}} \ 5950dc12ad05d4a3a57e83852756498afce4307a77Kaelyn Uhrain // expected-note {{'Uuuu' declared here}} 6050dc12ad05d4a3a57e83852756498afce4307a77Kaelyn Uhrain} *u[3]; 6150dc12ad05d4a3a57e83852756498afce4307a77Kaelyn Uhrainuuuu v; // expected-error {{did you mean 'Uuuu'}} 6237ec8d589c5de34d0e260f0599395519bd7498deRichard Smith 6337ec8d589c5de34d0e260f0599395519bd7498deRichard Smithstruct Redefined { // expected-note {{previous}} 6437ec8d589c5de34d0e260f0599395519bd7498deRichard Smith Redefined() {} 6537ec8d589c5de34d0e260f0599395519bd7498deRichard Smith}; 6637ec8d589c5de34d0e260f0599395519bd7498deRichard Smithstruct Redefined { // expected-error {{redefinition}} 6737ec8d589c5de34d0e260f0599395519bd7498deRichard Smith Redefined() {} 6837ec8d589c5de34d0e260f0599395519bd7498deRichard Smith}; 69f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling 70f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendlingstruct MissingSemi5; 71f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendlingnamespace N { 72f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling typedef int afterMissingSemi4; 73f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling extern MissingSemi5 afterMissingSemi5; 74f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling} 75f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling 76f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendlingstruct MissingSemi1 {} // expected-error {{expected ';' after struct}} 77f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendlingstatic int afterMissingSemi1(); 78f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling 79f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendlingclass MissingSemi2 {} // expected-error {{expected ';' after class}} 80f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill WendlingMissingSemi1 *afterMissingSemi2; 81f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling 82f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendlingenum MissingSemi3 {} // expected-error {{expected ';' after enum}} 83f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling::MissingSemi1 afterMissingSemi3; 84f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling 85f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendlingextern N::afterMissingSemi4 afterMissingSemi4b; 86f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendlingunion MissingSemi4 { MissingSemi4(int); } // expected-error {{expected ';' after union}} 87f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill WendlingN::afterMissingSemi4 (afterMissingSemi4b); 88f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling 89f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendlingint afterMissingSemi5b; 90f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendlingstruct MissingSemi5 { MissingSemi5(int); } // ok, no missing ';' here 91f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill WendlingN::afterMissingSemi5 (afterMissingSemi5b); 92f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling 93f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendlingtemplate<typename T> struct MissingSemiT { 94f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling} // expected-error {{expected ';' after struct}} 95f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill WendlingMissingSemiT<int> msi; 96f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling 97f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendlingstruct MissingSemiInStruct { 98f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling struct Inner1 {} // expected-error {{expected ';' after struct}} 99f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling static MissingSemi5 ms1; 100f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling 101f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling struct Inner2 {} // ok, no missing ';' here 102f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling static MissingSemi1; 103f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling 104f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling struct Inner3 {} // expected-error {{expected ';' after struct}} 105f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling static MissingSemi5 *p; 106f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling}; 107f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling 108f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendlingvoid MissingSemiInFunction() { 109f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling struct Inner1 {} // expected-error {{expected ';' after struct}} 110f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling if (true) {} 111f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling 112f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling // FIXME: It would be nice to at least warn on this. 113f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling struct Inner2 { Inner2(int); } // ok, no missing ';' here 114f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling k = l; 115f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling 116f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling struct Inner3 {} // expected-error {{expected ';' after struct}} 117f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling Inner1 i1; 118f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling 119f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling struct Inner4 {} // ok, no missing ';' here 120f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling Inner5; 121f0cc19f43d5e05dbd22d00faca8c093b7005be3fBill Wendling} 122e78e8fc27140309092fb56d77a72f31fa085f9daBill Wendling 123651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesnamespace NS { 124651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines template<typename T> struct Foo {}; 125651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 126651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct MissingSemiThenTemplate1 {} // expected-error {{expected ';' after struct}} 127651f13cea278ec967336033dd032faef0e9fc2ecStephen HinesNS::Foo<int> missingSemiBeforeFunctionReturningTemplateId1(); 128651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 129651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesusing NS::Foo; 130651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesstruct MissingSemiThenTemplate2 {} // expected-error {{expected ';' after struct}} 131651f13cea278ec967336033dd032faef0e9fc2ecStephen HinesFoo<int> missingSemiBeforeFunctionReturningTemplateId2(); 132651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 133e78e8fc27140309092fb56d77a72f31fa085f9daBill Wendlingnamespace PR17084 { 134e78e8fc27140309092fb56d77a72f31fa085f9daBill Wendlingenum class EnumID {}; 135e78e8fc27140309092fb56d77a72f31fa085f9daBill Wendlingtemplate <typename> struct TempID; 136e78e8fc27140309092fb56d77a72f31fa085f9daBill Wendlingtemplate <> struct TempID<BadType> : BadType, EnumID::Garbage; // expected-error{{use of undeclared identifier 'BadType'}} 137e78e8fc27140309092fb56d77a72f31fa085f9daBill Wendling} 1386bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 1396bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesnamespace pr15133 { 1406bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines namespace ns { 1416bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines const int V1 = 1; // expected-note {{declared here}} 1426bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines } 1436bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines struct C1 { 1446bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines enum E1 { V2 = 2 }; // expected-note {{declared here}} 1456bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines static const int V3 = 3; // expected-note {{declared here}} 1466bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines }; 1476bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines enum E2 { 1486bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines V4 = 4, // expected-note {{declared here}} 1496bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines V6 // expected-note {{declared here}} 1506bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines }; 1516bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines enum class EC3 { V0 = 0, V5 = 5 }; // expected-note {{declared here}} 1526bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines void func_3(); 1536bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 1546bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines void func_1(int x) { 1556bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines switch(x) { 1566bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case 0: break; 1576bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case ns::V1:: break; // expected-error{{'V1' cannot appear before '::' because it is not a class, namespace, or scoped enumeration; did you mean ':'?}} 1586bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case C1::V2:: break; // expected-error{{'V2' cannot appear before '::' because it is not a class, namespace, or scoped enumeration; did you mean ':'?}} 1596bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case C1::V3:: break; // expected-error{{'V3' cannot appear before '::' because it is not a class, namespace, or scoped enumeration; did you mean ':'?}} 1606bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case V4:: break; // expected-error{{'V4' cannot appear before '::' because it is not a class, namespace, or scoped enumeration; did you mean ':'?}} 1616bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case V6:: func_3(); // expected-error{{'V6' cannot appear before '::' because it is not a class, namespace, or scoped enumeration; did you mean ':'?}} 1626bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines } 1636bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines } 1646bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines void func_2(EC3 x) { 1656bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines switch(x) { 1666bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case EC3::V0: break; 1676bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case EC3::V5:: break; // expected-error{{'V5' cannot appear before '::' because it is not a class, namespace, or scoped enumeration; did you mean ':'?}} 1686bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines } 1696bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines } 1706bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 1716bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines template<class T> struct TS1 { 1726bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines typedef int A; 1736bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines }; 1746bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines template<class T> void func(int x) { 1756bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines switch(x) { 1766bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines case TS1<T>::A:: break; // expected-error{{expected unqualified-id}} 1776bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines } 1786bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines }; 1796bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines void mainf() { 1806bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines func<int>(1); 1816bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines } 1826bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 1836bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines struct S { 1846bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines static int n; // expected-note{{declared here}} 1856bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines int nn; // expected-note 2 {{declared here}} 1866bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines }; 1876bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 1886bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines int func_3(int x) { 1896bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return x ? S::n :: 0; // expected-error{{'n' cannot appear before '::' because it is not a class, namespace, or scoped enumeration; did you mean ':'?}} 1906bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines } 1916bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines int func_4(int x, S &s) { 1926bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return x ? s.nn :: x; // expected-error{{'nn' cannot appear before '::' because it is not a class, namespace, or scoped enumeration; did you mean ':'?}} 1936bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines } 1946bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines int func_5(int x, S &s) { 1956bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines return x ? s.nn :: S::n; // expected-error{{'nn' cannot appear before '::' because it is not a class, namespace, or scoped enumeration; did you mean ':'?}} 1966bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines } 1976bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 1986bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines struct S2 { 1996bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines struct S3; 2006bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines }; 2016bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 2026bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines struct S2 :: S3 :: public S2 { // expected-error{{'public' cannot be a part of nested name specifier; did you mean ':'?}} 2036bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines }; 2046bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines} 205