diff --git a/clang/lib/CodeGen/CGVTables.cpp b/clang/lib/CodeGen/CGVTables.cpp index a257de859d4e8f..32259d1e4cbff5 100644 --- a/clang/lib/CodeGen/CGVTables.cpp +++ b/clang/lib/CodeGen/CGVTables.cpp @@ -1212,7 +1212,8 @@ void CodeGenModule::EmitDeferredVTables() { } bool CodeGenModule::AlwaysHasLTOVisibilityPublic(const CXXRecordDecl *RD) { - if (RD->hasAttr() || RD->hasAttr()) + if (RD->hasAttr() || RD->hasAttr() || + RD->hasAttr() || RD->hasAttr()) return true; if (!getCodeGenOpts().LTOVisibilityPublicStd) @@ -1239,13 +1240,9 @@ bool CodeGenModule::HasHiddenLTOVisibility(const CXXRecordDecl *RD) { if (!isExternallyVisible(LV.getLinkage())) return true; - if (getTriple().isOSBinFormatCOFF()) { - if (RD->hasAttr() || RD->hasAttr()) - return false; - } else { - if (LV.getVisibility() != HiddenVisibility) - return false; - } + if (!getTriple().isOSBinFormatCOFF() && + LV.getVisibility() != HiddenVisibility) + return false; return !AlwaysHasLTOVisibilityPublic(RD); } diff --git a/clang/test/CodeGenCXX/lto-visibility-inference.cpp b/clang/test/CodeGenCXX/lto-visibility-inference.cpp index 12467431156049..e7ce3436a88b13 100644 --- a/clang/test/CodeGenCXX/lto-visibility-inference.cpp +++ b/clang/test/CodeGenCXX/lto-visibility-inference.cpp @@ -74,10 +74,10 @@ void f(C1 *c1, C2 *c2, C3 *c3, C4 *c4, C5 *c5, C6 *c6, std::C7 *c7, // MS: type.test{{.*}}!"?AUC2@@" c2->f(); // ITANIUM: type.test{{.*}}!"_ZTS2C3" - // MS: type.test{{.*}}!"?AUC3@@" + // MS-NOT: type.test{{.*}}!"?AUC3@@" c3->f(); // ITANIUM: type.test{{.*}}!"_ZTS2C4" - // MS: type.test{{.*}}!"?AUC4@@" + // MS-NOT: type.test{{.*}}!"?AUC4@@" c4->f(); // ITANIUM-NOT: type.test{{.*}}!"_ZTS2C5" // MS-NOT: type.test{{.*}}!"?AUC5@@"