Commit 5cc344d8 by John Kessenich

Front-End: precise: capture noContraction on output parameter declarations.

parent 076879d6
...@@ -83,10 +83,10 @@ ERROR: node is still EOpNull! ...@@ -83,10 +83,10 @@ ERROR: node is still EOpNull!
0:153 Function Parameters: 0:153 Function Parameters:
0:153 'i' (in float) 0:153 'i' (in float)
0:153 'j' (in float) 0:153 'j' (in float)
0:153 'k' (out float) 0:153 'k' (noContraction out float)
0:155 Sequence 0:155 Sequence
0:155 move second child to first child (temp float) 0:155 move second child to first child (temp float)
0:155 'k' (out float) 0:155 'k' (noContraction out float)
0:155 add (temp float) 0:155 add (temp float)
0:155 component-wise multiply (temp float) 0:155 component-wise multiply (temp float)
0:155 'i' (in float) 0:155 'i' (in float)
...@@ -367,10 +367,10 @@ ERROR: node is still EOpNull! ...@@ -367,10 +367,10 @@ ERROR: node is still EOpNull!
0:153 Function Parameters: 0:153 Function Parameters:
0:153 'i' (in float) 0:153 'i' (in float)
0:153 'j' (in float) 0:153 'j' (in float)
0:153 'k' (out float) 0:153 'k' (noContraction out float)
0:155 Sequence 0:155 Sequence
0:155 move second child to first child (temp float) 0:155 move second child to first child (temp float)
0:155 'k' (out float) 0:155 'k' (noContraction out float)
0:155 add (temp float) 0:155 add (temp float)
0:155 component-wise multiply (temp float) 0:155 component-wise multiply (temp float)
0:155 'i' (in float) 0:155 'i' (in float)
......
...@@ -3538,6 +3538,7 @@ void TParseContext::paramCheckFix(const TSourceLoc& loc, const TQualifier& quali ...@@ -3538,6 +3538,7 @@ void TParseContext::paramCheckFix(const TSourceLoc& loc, const TQualifier& quali
type.getQualifier().writeonly = qualifier.writeonly; type.getQualifier().writeonly = qualifier.writeonly;
type.getQualifier().restrict = qualifier.restrict; type.getQualifier().restrict = qualifier.restrict;
} }
if (qualifier.isAuxiliary() || if (qualifier.isAuxiliary() ||
qualifier.isInterpolation()) qualifier.isInterpolation())
error(loc, "cannot use auxiliary or interpolation qualifiers on a function parameter", "", ""); error(loc, "cannot use auxiliary or interpolation qualifiers on a function parameter", "", "");
...@@ -3545,8 +3546,12 @@ void TParseContext::paramCheckFix(const TSourceLoc& loc, const TQualifier& quali ...@@ -3545,8 +3546,12 @@ void TParseContext::paramCheckFix(const TSourceLoc& loc, const TQualifier& quali
error(loc, "cannot use layout qualifiers on a function parameter", "", ""); error(loc, "cannot use layout qualifiers on a function parameter", "", "");
if (qualifier.invariant) if (qualifier.invariant)
error(loc, "cannot use invariant qualifier on a function parameter", "", ""); error(loc, "cannot use invariant qualifier on a function parameter", "", "");
if (qualifier.noContraction && qualifier.storage != EvqOut && qualifier.storage != EvqInOut) if (qualifier.noContraction) {
warn(loc, "qualifier has no effect on non-output parameters", "precise", ""); if (qualifier.storage == EvqOut || qualifier.storage == EvqInOut)
type.getQualifier().noContraction = true;
else
warn(loc, "qualifier has no effect on non-output parameters", "precise", "");
}
paramCheckFix(loc, qualifier.storage, type); paramCheckFix(loc, qualifier.storage, type);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment