Improved fix for buffer reference constants
This is an alternate fix for the issue described in commit be63facd, whose
solution didn't work if there were non-trivial operations involved in computing
a constant initializer which caused the 'constant unfolding' code to kick in
(addConstantReferenceConversion). Instead, this change does the 'unfolding'
later in createSpvConstantFromConstUnionArray. If a reference-type constant has
survived that long, then folding is already done, this must be a 'real' (inside
a function) use of the constant, and it should be safe to unfold and apply the
bitcast.
This commit is contained in:
parent
79d25ea0ce
commit
3fd1232665
6 changed files with 75 additions and 75 deletions
|
|
@ -6,6 +6,7 @@
|
|||
|
||||
layout(buffer_reference) buffer T1 {
|
||||
int x;
|
||||
bool y;
|
||||
};
|
||||
layout(buffer_reference) buffer T2 {
|
||||
int x;
|
||||
|
|
@ -13,6 +14,7 @@ layout(buffer_reference) buffer T2 {
|
|||
|
||||
const int s = int(uint64_t(T1(T2(uint64_t(3)))));
|
||||
int x[s];
|
||||
const uint64_t t = uint64_t(true ? T2(uint64_t(10)) : T2(uint64_t(11)));
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
@ -20,4 +22,5 @@ void main()
|
|||
T1 c = true ? a : b;
|
||||
T1 d = (a,b);
|
||||
T1 e = true ? T1(uint64_t(6)) : T1(uint64_t(7));
|
||||
T1 f = a.y ? T1(uint64_t(8)) : T1(uint64_t(9));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue