| 6467 | } |
| 6468 | |
| 6469 | void TParseContext::structTypeCheck(const TSourceLoc& /*loc*/, TPublicType& publicType) |
| 6470 | { |
| 6471 | const TTypeList& typeList = *publicType.userDef->getStruct(); |
| 6472 | |
| 6473 | // fix and check for member storage qualifiers and types that don't belong within a structure |
| 6474 | for (unsigned int member = 0; member < typeList.size(); ++member) { |
| 6475 | TQualifier& memberQualifier = typeList[member].type->getQualifier(); |
| 6476 | const TSourceLoc& memberLoc = typeList[member].loc; |
| 6477 | if (memberQualifier.isAuxiliary() || |
| 6478 | memberQualifier.isInterpolation() || |
| 6479 | (memberQualifier.storage != EvqTemporary && memberQualifier.storage != EvqGlobal && |
| 6480 | !memberQualifier.layoutDescriptorHeap && !memberQualifier.layoutDescriptorInnerBlock)) |
| 6481 | error(memberLoc, "cannot use storage or interpolation qualifiers on structure members", typeList[member].type->getFieldName().c_str(), ""); |
| 6482 | if (memberQualifier.isMemory()) |
| 6483 | error(memberLoc, "cannot use memory qualifiers on structure members", typeList[member].type->getFieldName().c_str(), ""); |
| 6484 | if (memberQualifier.hasLayout()) { |
| 6485 | error(memberLoc, "cannot use layout qualifiers on structure members", typeList[member].type->getFieldName().c_str(), ""); |
| 6486 | memberQualifier.clearLayout(); |
| 6487 | } |
| 6488 | if (memberQualifier.invariant) |
| 6489 | error(memberLoc, "cannot use invariant qualifier on structure members", typeList[member].type->getFieldName().c_str(), ""); |
| 6490 | } |
| 6491 | } |
| 6492 | |
| 6493 | // |
| 6494 | // See if this loop satisfies the limitations for ES 2.0 (version 100) for loops in Appendex A: |
no test coverage detected