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

This commit is contained in:
John Kessenich 2016-05-05 13:36:55 -06:00
parent 076879d61c
commit 5cc344d8ce
2 changed files with 11 additions and 6 deletions

View file

@ -3538,6 +3538,7 @@ void TParseContext::paramCheckFix(const TSourceLoc& loc, const TQualifier& quali
type.getQualifier().writeonly = qualifier.writeonly;
type.getQualifier().restrict = qualifier.restrict;
}
if (qualifier.isAuxiliary() ||
qualifier.isInterpolation())
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
error(loc, "cannot use layout qualifiers on a function parameter", "", "");
if (qualifier.invariant)
error(loc, "cannot use invariant qualifier on a function parameter", "", "");
if (qualifier.noContraction && qualifier.storage != EvqOut && qualifier.storage != EvqInOut)
warn(loc, "qualifier has no effect on non-output parameters", "precise", "");
if (qualifier.noContraction) {
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);
}