// TODO(umar): Check linkage capabilities for function declarations
// TODO(umar): Better error messages
// NOTE: This function does not handle CFG related validation
// Performs logical layout validation. See Section 2.4
spv_result_t ModuleLayoutPass(ValidationState_t& _,
                              const spv_parsed_instruction_t* inst) {
  if (_.is_enabled(SPV_VALIDATE_LAYOUT_BIT)) {
    SpvOp opcode = inst->opcode;

    switch (_.getLayoutSection()) {
      case kLayoutCapabilities:
      case kLayoutExtensions:
      case kLayoutExtInstImport:
      case kLayoutMemoryModel:
      case kLayoutEntryPoint:
      case kLayoutExecutionMode:
      case kLayoutDebug1:
      case kLayoutDebug2:
      case kLayoutAnnotations:
      case kLayoutTypes:
        spvCheckReturn(ModuleScopedInstructions(_, inst, opcode));
        break;
      case kLayoutFunctionDeclarations:
      case kLayoutFunctionDefinitions:
        spvCheckReturn(FunctionScopedInstructions(_, inst, opcode));
        break;
    }  // switch(getLayoutSection())
  }
  return SPV_SUCCESS;
}
Exemple #2
0
// TODO(umar): Check linkage capabilities for function declarations
// TODO(umar): Better error messages
// NOTE: This function does not handle CFG related validation
// Performs logical layout validation. See Section 2.4
spv_result_t ModuleLayoutPass(ValidationState_t& _, const Instruction* inst) {
  const SpvOp opcode = inst->opcode();

  switch (_.current_layout_section()) {
    case kLayoutCapabilities:
    case kLayoutExtensions:
    case kLayoutExtInstImport:
    case kLayoutMemoryModel:
    case kLayoutEntryPoint:
    case kLayoutExecutionMode:
    case kLayoutDebug1:
    case kLayoutDebug2:
    case kLayoutDebug3:
    case kLayoutAnnotations:
    case kLayoutTypes:
      if (auto error = ModuleScopedInstructions(_, inst, opcode)) return error;
      break;
    case kLayoutFunctionDeclarations:
    case kLayoutFunctionDefinitions:
      if (auto error = FunctionScopedInstructions(_, inst, opcode)) {
        return error;
      }
      break;
  }
  return SPV_SUCCESS;
}