HLSL: Fix #919: for-init-statement is arbitrary declaration or expression.
Unlike "if (XXX)" and "while (XXX)", with "for (YYY...", the YYY can be more kinds of statements than the XXX.
This commit is contained in:
parent
e00e8f45a6
commit
0e07119ae2
5 changed files with 322 additions and 62 deletions
|
|
@ -1735,8 +1735,13 @@ TIntermAggregate* TIntermediate::addForLoop(TIntermNode* body, TIntermNode* init
|
|||
node->setLoc(loc);
|
||||
node->setLoopControl(control);
|
||||
|
||||
// make a sequence of the initializer and statement
|
||||
TIntermAggregate* loopSequence = makeAggregate(initializer, loc);
|
||||
// make a sequence of the initializer and statement, but try to reuse the
|
||||
// aggregate already created for whatever is in the initializer, if there is one
|
||||
TIntermAggregate* loopSequence = (initializer == nullptr ||
|
||||
initializer->getAsAggregate() == nullptr) ? makeAggregate(initializer, loc)
|
||||
: initializer->getAsAggregate();
|
||||
if (loopSequence != nullptr && loopSequence->getOp() == EOpSequence)
|
||||
loopSequence->setOp(EOpNull);
|
||||
loopSequence = growAggregate(loopSequence, node);
|
||||
loopSequence->setOperator(EOpSequence);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue