xref: /llvm-project/clang/test/ParserHLSL/access_specifiers.hlsl (revision 0d6b574b8717a44cda565baa756875f762fa60b9)
1// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -x hlsl -ast-dump -o - %s -verify
2// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -x hlsl -ast-dump -DSTRUCT -o - %s -verify
3
4#ifdef STRUCT
5#define KEYWORD struct
6#else
7#define KEYWORD class
8#endif
9
10KEYWORD Doggo {
11  int legs;    // expected-note {{member is declared here}} expected-note {{member is declared here}}
12protected:     // expected-warning {{access specifiers are a clang HLSL extension}}
13  int ears[2]; // expected-note {{declared protected here}}
14private:       // expected-warning {{access specifiers are a clang HLSL extension}}
15  int tail;    // expected-note {{declared private here}} expected-note {{declared private here}}
16};
17
18KEYWORD Shiba : public Doggo { // expected-warning {{access specifiers are a clang HLSL extension}}
19  int undercoat;
20};
21
22KEYWORD Akita : Doggo {
23  int floof;
24};
25
26KEYWORD Chow : private Doggo {  // expected-warning {{access specifiers are a clang HLSL extension}} expected-note {{constrained by private inheritance here}}
27  int megafloof;
28};
29
30KEYWORD Dachshund : protected Doggo {  // expected-warning {{access specifiers are a clang HLSL extension}} expected-note {{constrained by protected inheritance here}}
31  int wiry;
32};
33
34void Puppers() {
35  Shiba Shibe;
36  Shibe.undercoat = 0xFFFF;
37  Shibe.legs = 4;
38
39  Shibe.tail = 1;    // expected-error {{'tail' is a private member of 'Doggo'}}
40  Shibe.ears[0] = 1; // expected-error {{'ears' is a protected member of 'Doggo'}}
41
42  Akita Aki;
43  Aki.floof = 0xFFFF;
44  Aki.legs = 4;
45
46  Aki.tail = 1; // expected-error {{'tail' is a private member of 'Doggo'}}
47
48  Chow Ch;
49  Ch.megafloof = 0xFFFF;
50
51  Ch.legs = 4; // expected-error {{'legs' is a private member of 'Doggo'}}
52
53  Dachshund DH;
54  DH.legs = 4; // expected-error {{'legs' is a protected member of 'Doggo'}}
55}
56