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:
Jeff Bolz 2019-03-05 23:27:09 -06:00
parent 79d25ea0ce
commit 3fd1232665
6 changed files with 75 additions and 75 deletions

View file

@ -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));
}