1ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// RUN: %clang_cc1 -fsyntax-only -verify %s
2ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
3ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// Derived from GNU's std::string
4ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaonamespace test0 {
5ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  class A {
6ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    struct B {
7ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao      unsigned long length;
8ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    };
9ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    struct C : B {
10ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao      static const unsigned long max_length;
11ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    };
12ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  };
13ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
14ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  const unsigned long A::C::max_length = sizeof(B);
15ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}
16ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
17ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao// Example from the standard.
18ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaonamespace test1 {
19ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  class E {
20ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    int x;
21ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    class B {};
22ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
23ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    class I {
24ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao      B b;
25ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao      int y; // expected-note {{declared private here}}
26ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao      void f(E* p, int i) {
27ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao        p->x = i;
28ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao      }
29ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    };
30ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao
31ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao    int g(I* p) { return p->y; } // expected-error {{'y' is a private member of 'test1::E::I'}}
32ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao  };
33ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao}
34