forked from llvm/llvm-project
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[HLSL] Adjust access specifier behavior
HLSL doesn't support access specifiers. This change has two components: 1) Make default access for classes public 2) Diagnose the use of access specifiers as a clang HLSL extension As long as the default behavior for access specifiers matches HLSL, allowing them to be used doesn't cause sourece incompatability with valid code. As such enabling them as a clang extension seems like a reasonable approach. Fixes llvm#55124 Reviewed By: aaron.ballman Differential Revision: https://reviews.llvm.org/D124487
- Loading branch information
1 parent
bd30d4b
commit 0d6b574
Showing
5 changed files
with
74 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
// 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'}} | ||
} |