Lines Matching defs:RD
920 const CXXRecordDecl *RD, const BaseSubobject &Base, bool BaseIsVirtual,
928 Base.getBase(), Base.getBaseOffset(), BaseIsVirtual, RD));
937 .mangleCXXCtorVTable(RD, Base.getBaseOffset().getQuantity(),
981 CGM.setGVProperties(VTable, RD);
983 CGM.EmitVTableTypeMetadata(RD, VTable, *VTLayout.get());
1069 const CXXRecordDecl *RD) {
1071 CGM.getCXXABI().canSpeculativelyEmitVTable(RD);
1078 CodeGenModule::getVTableLinkage(const CXXRecordDecl *RD) {
1079 if (!RD->isExternallyVisible())
1084 RD->isInNamedModule();
1089 IsInNamedModule ? nullptr : Context.getCurrentKeyFunction(RD);
1090 if (IsInNamedModule || (keyFunction && !RD->hasAttr<DLLImportAttr>())) {
1098 IsInNamedModule ? RD->shouldEmitInExternalSource() : !def;
1101 IsInNamedModule ? RD->getTemplateSpecializationKind()
1146 if (RD->hasAttr<DLLExportAttr>()) {
1149 } else if (RD->hasAttr<DLLImportAttr>()) {
1155 switch (RD->getTemplateSpecializationKind()) {
1166 return shouldEmitAvailableExternallyVTable(*this, RD)
1188 CodeGenVTables::GenerateClassData(const CXXRecordDecl *RD) {
1190 DI->completeClassData(RD);
1192 if (RD->getNumVBases())
1193 CGM.getCXXABI().emitVirtualInheritanceTables(RD);
1195 CGM.getCXXABI().emitVTableDefinitions(*this, RD);
1208 bool CodeGenVTables::isVTableExternal(const CXXRecordDecl *RD) {
1209 assert(RD->isDynamicClass() && "Non-dynamic classes have no VTable.");
1218 TemplateSpecializationKind TSK = RD->getTemplateSpecializationKind();
1230 if (RD->isInNamedModule())
1231 return RD->shouldEmitInExternalSource();
1235 const CXXMethodDecl *keyFunction = CGM.getContext().getCurrentKeyFunction(RD);
1248 const CXXRecordDecl *RD) {
1250 if (!CGM.getVTables().isVTableExternal(RD))
1254 return shouldEmitAvailableExternallyVTable(CGM, RD);
1267 for (const CXXRecordDecl *RD : DeferredVTables)
1268 if (shouldEmitVTableAtEndOfTranslationUnit(*this, RD))
1269 VTables.GenerateClassData(RD);
1271 OpportunisticVTables.push_back(RD);
1278 bool CodeGenModule::AlwaysHasLTOVisibilityPublic(const CXXRecordDecl *RD) {
1279 if (RD->hasAttr<LTOVisibilityPublicAttr>() || RD->hasAttr<UuidAttr>() ||
1280 RD->hasAttr<DLLExportAttr>() || RD->hasAttr<DLLImportAttr>())
1286 const DeclContext *DC = RD;
1302 bool CodeGenModule::HasHiddenLTOVisibility(const CXXRecordDecl *RD) {
1303 LinkageInfo LV = RD->getLinkageAndVisibility();
1311 return !AlwaysHasLTOVisibilityPublic(RD);
1315 const CXXRecordDecl *RD, llvm::DenseSet<const CXXRecordDecl *> &Visited) {
1316 // If we have already visited this RD (which means this is a recursive call
1321 if (!Visited.insert(RD).second)
1324 LinkageInfo LV = RD->getLinkageAndVisibility();
1328 else if (HasHiddenLTOVisibility(RD))
1333 for (const auto &B : RD->bases())
1339 for (const auto &B : RD->vbases())
1348 void CodeGenModule::EmitVTableTypeMetadata(const CXXRecordDecl *RD,
1407 GetVCallVisibilityLevel(RD, Visited);