diff --git a/clang/lib/CodeGen/CGVTables.cpp b/clang/lib/CodeGen/CGVTables.cpp --- a/clang/lib/CodeGen/CGVTables.cpp +++ b/clang/lib/CodeGen/CGVTables.cpp @@ -1212,7 +1212,8 @@ } 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 @@ 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 --- a/clang/test/CodeGenCXX/lto-visibility-inference.cpp +++ b/clang/test/CodeGenCXX/lto-visibility-inference.cpp @@ -74,10 +74,10 @@ // 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@@"