================ @@ -1154,3 +1156,70 @@ bool SemaHLSL::CheckBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall) { } return false; } + +static bool calculateIsIntangibleType(QualType Ty) { + Ty = Ty->getCanonicalTypeUnqualified(); + if (Ty->isBuiltinType()) + return Ty->isHLSLSpecificType(); + + llvm::SmallVector<QualType, 8> TypesToScan; + TypesToScan.push_back(Ty); + while (!TypesToScan.empty()) { + QualType T = TypesToScan.pop_back_val(); + assert(T == T->getCanonicalTypeUnqualified() && "expected sugar-free type"); + assert(!isa<MatrixType>(T) && "Matrix types not yet supported in HLSL"); + + if (const auto *AT = dyn_cast<ConstantArrayType>(T)) { + QualType ElTy = AT->getElementType()->getCanonicalTypeUnqualified(); + if (ElTy->isBuiltinType()) + return ElTy->isHLSLSpecificType(); + TypesToScan.push_back(ElTy); + continue; + } + + if (const auto *VT = dyn_cast<VectorType>(T)) { + QualType ElTy = VT->getElementType()->getCanonicalTypeUnqualified(); + assert(ElTy->isBuiltinType() && "vectors can only contain builtin types"); + if (ElTy->isHLSLSpecificType()) + return true; + continue; + } + + if (const auto *RT = dyn_cast<RecordType>(T)) { + const RecordDecl *RD = RT->getDecl(); + for (const auto *FD : RD->fields()) { + QualType FieldTy = FD->getType()->getCanonicalTypeUnqualified(); + if (FieldTy->isBuiltinType()) { + if (FieldTy->isHLSLSpecificType()) ---------------- pow2clk wrote:
It's a very minor nit, but given the repetition of this check, we could just test this at the top of the loop after popping it off the work queue instead of testing it before insertion. https://github.com/llvm/llvm-project/pull/104544 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits