193962e5360a43200faa70939571afc4fb9326cf7Douglas Gregor// RUN: %clang_cc1 -std=c++11 %s -verify 293962e5360a43200faa70939571afc4fb9326cf7Douglas Gregor 3503384f731b5abcbf870b0a5224eb920e631db0aDouglas Gregorint GlobalVar; // expected-note {{declared here}} 493962e5360a43200faa70939571afc4fb9326cf7Douglas Gregor 593962e5360a43200faa70939571afc4fb9326cf7Douglas Gregornamespace N { 693962e5360a43200faa70939571afc4fb9326cf7Douglas Gregor int AmbiguousVar; // expected-note {{candidate}} 793962e5360a43200faa70939571afc4fb9326cf7Douglas Gregor} 893962e5360a43200faa70939571afc4fb9326cf7Douglas Gregorint AmbiguousVar; // expected-note {{candidate}} 993962e5360a43200faa70939571afc4fb9326cf7Douglas Gregorusing namespace N; 1093962e5360a43200faa70939571afc4fb9326cf7Douglas Gregor 1193962e5360a43200faa70939571afc4fb9326cf7Douglas Gregorclass X0 { 1293962e5360a43200faa70939571afc4fb9326cf7Douglas Gregor int Member; 1393962e5360a43200faa70939571afc4fb9326cf7Douglas Gregor 1493962e5360a43200faa70939571afc4fb9326cf7Douglas Gregor static void Overload(int); 1593962e5360a43200faa70939571afc4fb9326cf7Douglas Gregor void Overload(); 1693962e5360a43200faa70939571afc4fb9326cf7Douglas Gregor virtual X0& Overload(float); 1793962e5360a43200faa70939571afc4fb9326cf7Douglas Gregor 1893962e5360a43200faa70939571afc4fb9326cf7Douglas Gregor void explicit_capture() { 19503384f731b5abcbf870b0a5224eb920e631db0aDouglas Gregor int variable; // expected-note {{declared here}} 20b326ca8ffbea96f9cc8a457b0f57be880304a6f5Douglas Gregor (void)[&Overload] () {}; // expected-error {{does not name a variable}} 21b326ca8ffbea96f9cc8a457b0f57be880304a6f5Douglas Gregor (void)[&GlobalVar] () {}; // expected-error {{does not have automatic storage duration}} 22b326ca8ffbea96f9cc8a457b0f57be880304a6f5Douglas Gregor (void)[&AmbiguousVar] () {}; // expected-error {{reference to 'AmbiguousVar' is ambiguous}} 23b326ca8ffbea96f9cc8a457b0f57be880304a6f5Douglas Gregor (void)[&Variable] () {}; // expected-error {{use of undeclared identifier 'Variable'; did you mean 'variable'}} 2493962e5360a43200faa70939571afc4fb9326cf7Douglas Gregor } 2593962e5360a43200faa70939571afc4fb9326cf7Douglas Gregor}; 2673d90928c0462daf0665fd7f8e44ca00d896540dDouglas Gregor 2773d90928c0462daf0665fd7f8e44ca00d896540dDouglas Gregorvoid test_reaching_scope() { 2873d90928c0462daf0665fd7f8e44ca00d896540dDouglas Gregor int local; // expected-note{{declared here}} 2973d90928c0462daf0665fd7f8e44ca00d896540dDouglas Gregor static int local_static; // expected-note{{'local_static' declared here}} 3073d90928c0462daf0665fd7f8e44ca00d896540dDouglas Gregor (void)[=]() { 3173d90928c0462daf0665fd7f8e44ca00d896540dDouglas Gregor struct InnerLocal { 3273d90928c0462daf0665fd7f8e44ca00d896540dDouglas Gregor void member() { 3373d90928c0462daf0665fd7f8e44ca00d896540dDouglas Gregor (void)[local, // expected-error{{reference to local variable 'local' declared in enclosing function 'test_reaching_scope'}} 3473d90928c0462daf0665fd7f8e44ca00d896540dDouglas Gregor local_static]() { // expected-error{{'local_static' cannot be captured because it does not have automatic storage duration}} 3573d90928c0462daf0665fd7f8e44ca00d896540dDouglas Gregor return 0; 3673d90928c0462daf0665fd7f8e44ca00d896540dDouglas Gregor }; 3773d90928c0462daf0665fd7f8e44ca00d896540dDouglas Gregor } 3873d90928c0462daf0665fd7f8e44ca00d896540dDouglas Gregor }; 3973d90928c0462daf0665fd7f8e44ca00d896540dDouglas Gregor }; 4073d90928c0462daf0665fd7f8e44ca00d896540dDouglas Gregor} 41