SPV: Prevent issue #415 with better semantic checking.
This commit is contained in:
parent
11e1a073f3
commit
1176530bf5
9 changed files with 2681 additions and 2937 deletions
|
|
@ -1181,6 +1181,8 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction
|
|||
|
||||
if (builtIn)
|
||||
nonOpBuiltInCheck(loc, *fnCandidate, *call);
|
||||
else
|
||||
userFunctionCallCheck(loc, *call);
|
||||
}
|
||||
|
||||
// Convert 'out' arguments. If it was a constant folded built-in, it won't be an aggregate anymore.
|
||||
|
|
@ -1723,6 +1725,26 @@ void TParseContext::nonOpBuiltInCheck(const TSourceLoc& loc, const TFunction& fn
|
|||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Do any extra checking for a user function call.
|
||||
//
|
||||
void TParseContext::userFunctionCallCheck(const TSourceLoc& loc, TIntermAggregate& callNode)
|
||||
{
|
||||
TIntermSequence& arguments = callNode.getSequence();
|
||||
|
||||
for (int i = 0; i < (int)arguments.size(); ++i)
|
||||
samplerConstructorLocationCheck(loc, "call argument", arguments[i]);
|
||||
}
|
||||
|
||||
//
|
||||
// Emit an error if this is a sampler constructor
|
||||
//
|
||||
void TParseContext::samplerConstructorLocationCheck(const TSourceLoc& loc, const char* token, TIntermNode* node)
|
||||
{
|
||||
if (node->getAsOperator() && node->getAsOperator()->getOp() == EOpConstructTextureSampler)
|
||||
error(loc, "sampler constructor must appear at point of use", token, "");
|
||||
}
|
||||
|
||||
//
|
||||
// Handle seeing a built-in constructor in a grammar production.
|
||||
//
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue