bool WebCLRestrictor::handleParmVarDecl(clang::ParmVarDecl *decl) { const clang::TypeSourceInfo *info = decl->getTypeSourceInfo(); if (!info) { error(decl->getSourceRange().getBegin(), "Invalid parameter type.\n"); return true; } clang::SourceLocation typeLocation = info->getTypeLoc().getBeginLoc(); const clang::QualType qualType = info->getType(); const clang::Type *type = qualType.getTypePtrOrNull(); if (!info) { error(typeLocation, "Invalid parameter type.\n"); return true; } const clang::DeclContext *context = decl->getParentFunctionOrMethod(); if (!context) { error(typeLocation, "Invalid parameter context.\n"); return true; } clang::FunctionDecl *function = clang::FunctionDecl::castFromDeclContext(context); if (!function) { error(typeLocation, "Invalid parameter context.\n"); return true; } checkStructureParameter(function, typeLocation, type); check3dImageParameter(function, typeLocation, type); checkUnsupportedBuiltinParameter(function, typeLocation, qualType); return true; }
int TypeUtils::sizeOfPointer(const clang::CompilerInstance &ci, clang::QualType qt) { if (!qt.getTypePtrOrNull()) return -1; // HACK: What's a better way of getting the size of a pointer ? auto &astContext = ci.getASTContext(); return astContext.getTypeSize(astContext.getPointerType(qt)); }
bool QtUtils::isQObject(clang::QualType qt) { qt = TypeUtils::pointeeQualType(qt); const auto t = qt.getTypePtrOrNull(); return t ? isQObject(t->getAsCXXRecordDecl()) : false; }