// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -x hlsl -ast-dump -o - %s -verify // RUN: %clang_cc1 -triple dxil-pc-shadermodel6.0-compute -x hlsl -ast-dump -DSTRUCT -o - %s -verify #ifdef STRUCT #define KEYWORD struct #else #define KEYWORD class #endif KEYWORD Doggo { int legs; // expected-note {{member is declared here}} expected-note {{member is declared here}} protected: // expected-warning {{access specifiers are a clang HLSL extension}} int ears[2]; // expected-note {{declared protected here}} private: // expected-warning {{access specifiers are a clang HLSL extension}} int tail; // expected-note {{declared private here}} expected-note {{declared private here}} }; KEYWORD Shiba : public Doggo { // expected-warning {{access specifiers are a clang HLSL extension}} int undercoat; }; KEYWORD Akita : Doggo { int floof; }; KEYWORD Chow : private Doggo { // expected-warning {{access specifiers are a clang HLSL extension}} expected-note {{constrained by private inheritance here}} int megafloof; }; KEYWORD Dachshund : protected Doggo { // expected-warning {{access specifiers are a clang HLSL extension}} expected-note {{constrained by protected inheritance here}} int wiry; }; void Puppers() { Shiba Shibe; Shibe.undercoat = 0xFFFF; Shibe.legs = 4; Shibe.tail = 1; // expected-error {{'tail' is a private member of 'Doggo'}} Shibe.ears[0] = 1; // expected-error {{'ears' is a protected member of 'Doggo'}} Akita Aki; Aki.floof = 0xFFFF; Aki.legs = 4; Aki.tail = 1; // expected-error {{'tail' is a private member of 'Doggo'}} Chow Ch; Ch.megafloof = 0xFFFF; Ch.legs = 4; // expected-error {{'legs' is a private member of 'Doggo'}} Dachshund DH; DH.legs = 4; // expected-error {{'legs' is a protected member of 'Doggo'}} }