10a29422eb722c0ffbb98b98d8636042b19069f1aEli Friedman// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
20a29422eb722c0ffbb98b98d8636042b19069f1aEli Friedman
30a29422eb722c0ffbb98b98d8636042b19069f1aEli Friedmanvoid f() {
40a29422eb722c0ffbb98b98d8636042b19069f1aEli Friedman  int x = 3; // expected-note{{'x' declared here}}
50a29422eb722c0ffbb98b98d8636042b19069f1aEli Friedman  const int c = 2;
60a29422eb722c0ffbb98b98d8636042b19069f1aEli Friedman  struct C {
70a29422eb722c0ffbb98b98d8636042b19069f1aEli Friedman    int& x2 = x; // expected-error{{reference to local variable 'x' declared in enclosing function 'f'}}
80a29422eb722c0ffbb98b98d8636042b19069f1aEli Friedman    int cc = c;
90a29422eb722c0ffbb98b98d8636042b19069f1aEli Friedman  };
10b326ca8ffbea96f9cc8a457b0f57be880304a6f5Douglas Gregor  (void)[]() mutable {
110a29422eb722c0ffbb98b98d8636042b19069f1aEli Friedman    int x = 3; // expected-note{{'x' declared here}}
120a29422eb722c0ffbb98b98d8636042b19069f1aEli Friedman    struct C {
130a29422eb722c0ffbb98b98d8636042b19069f1aEli Friedman      int& x2 = x; // expected-error{{reference to local variable 'x' declared in enclosing lambda expression}}
140a29422eb722c0ffbb98b98d8636042b19069f1aEli Friedman    };
15503384f731b5abcbf870b0a5224eb920e631db0aDouglas Gregor  };
160a29422eb722c0ffbb98b98d8636042b19069f1aEli Friedman  C();
170a29422eb722c0ffbb98b98d8636042b19069f1aEli Friedman}
180a29422eb722c0ffbb98b98d8636042b19069f1aEli Friedman
19