Skip to content

Commit 858d04d

Browse files
author
Pavel Chupin
authored
Revert "In MSVC compatibility mode, friend function declarations behave as function declarations" (#6143)
This reverts commit ad47114. Temporary workaround for #6142 Reverting while there is a discussion at https://reviews.llvm.org/D124613 Will return back with the appropriate fix.
1 parent a6e5617 commit 858d04d

File tree

3 files changed

+5
-63
lines changed

3 files changed

+5
-63
lines changed

clang/lib/Sema/SemaDecl.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9700,15 +9700,11 @@ Sema::ActOnFunctionDeclarator(Scope *S, Declarator &D, DeclContext *DC,
97009700
}
97019701

97029702
if (isFriend) {
9703-
// In MSVC mode for older versions of the standard, friend function
9704-
// declarations behave as declarations
9705-
bool PerformFriendInjection =
9706-
getLangOpts().MSVCCompat && !getLangOpts().CPlusPlus20;
97079703
if (FunctionTemplate) {
9708-
FunctionTemplate->setObjectOfFriendDecl(PerformFriendInjection);
9704+
FunctionTemplate->setObjectOfFriendDecl();
97099705
FunctionTemplate->setAccess(AS_public);
97109706
}
9711-
NewFD->setObjectOfFriendDecl(PerformFriendInjection);
9707+
NewFD->setObjectOfFriendDecl();
97129708
NewFD->setAccess(AS_public);
97139709
}
97149710

clang/test/SemaCXX/ms-friend-function-decl.cpp

Lines changed: 0 additions & 45 deletions
This file was deleted.

clang/unittests/AST/ASTImporterTest.cpp

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2658,10 +2658,7 @@ TEST_P(ImportFriendFunctions, Lookup) {
26582658
getTuDecl("struct X { friend void f(); };", Lang_CXX03, "input0.cc");
26592659
auto *FromD = FirstDeclMatcher<FunctionDecl>().match(FromTU, FunctionPattern);
26602660
ASSERT_TRUE(FromD->isInIdentifierNamespace(Decl::IDNS_OrdinaryFriend));
2661-
// Before CXX20, MSVC treats friend function declarations as function
2662-
// declarations
2663-
ASSERT_EQ(FromTU->getLangOpts().MSVCCompat,
2664-
FromD->isInIdentifierNamespace(Decl::IDNS_Ordinary));
2661+
ASSERT_FALSE(FromD->isInIdentifierNamespace(Decl::IDNS_Ordinary));
26652662
{
26662663
auto FromName = FromD->getDeclName();
26672664
auto *Class = FirstDeclMatcher<CXXRecordDecl>().match(FromTU, ClassPattern);
@@ -2705,10 +2702,7 @@ TEST_P(ImportFriendFunctions, LookupWithProtoAfter) {
27052702
auto *FromNormal =
27062703
LastDeclMatcher<FunctionDecl>().match(FromTU, FunctionPattern);
27072704
ASSERT_TRUE(FromFriend->isInIdentifierNamespace(Decl::IDNS_OrdinaryFriend));
2708-
// Before CXX20, MSVC treats friend function declarations as function
2709-
// declarations
2710-
ASSERT_EQ(FromTU->getLangOpts().MSVCCompat,
2711-
FromFriend->isInIdentifierNamespace(Decl::IDNS_Ordinary));
2705+
ASSERT_FALSE(FromFriend->isInIdentifierNamespace(Decl::IDNS_Ordinary));
27122706
ASSERT_FALSE(FromNormal->isInIdentifierNamespace(Decl::IDNS_OrdinaryFriend));
27132707
ASSERT_TRUE(FromNormal->isInIdentifierNamespace(Decl::IDNS_Ordinary));
27142708

@@ -2799,10 +2793,7 @@ TEST_P(ImportFriendFunctions, ImportFriendChangesLookup) {
27992793

28002794
ASSERT_TRUE(FromNormalF->isInIdentifierNamespace(Decl::IDNS_Ordinary));
28012795
ASSERT_FALSE(FromNormalF->isInIdentifierNamespace(Decl::IDNS_OrdinaryFriend));
2802-
// Before CXX20, MSVC treats friend function declarations as function
2803-
// declarations
2804-
ASSERT_EQ(FromFriendTU->getLangOpts().MSVCCompat,
2805-
FromFriendF->isInIdentifierNamespace(Decl::IDNS_Ordinary));
2796+
ASSERT_FALSE(FromFriendF->isInIdentifierNamespace(Decl::IDNS_Ordinary));
28062797
ASSERT_TRUE(FromFriendF->isInIdentifierNamespace(Decl::IDNS_OrdinaryFriend));
28072798
auto LookupRes = FromNormalTU->noload_lookup(FromNormalName);
28082799
ASSERT_TRUE(LookupRes.isSingleResult());

0 commit comments

Comments
 (0)