Hi,
I found code in Sema::ActOnFriendFunctionDecl() which I am almost sure
is dead and would like to remove it.
The code in question is the following check:
if (!Previous.empty() && DC->Equals(CurContext))
Diag(DS.getFriendSpecLoc(),
getLangOpts().CPlusPlus11 ?
diag::warn_cxx98_compat_friend_is_member :
diag::err_friend_is_member);
which happens immediately after this loop:
DC = CurContext;
while (true) {
while (DC->isRecord() || DC->isTransparentContext())
DC = DC->getParent();
LookupQualifiedName(Previous, DC);
// TODO: decide what we think about using declarations.
if (isLocal || !Previous.empty())
break;
if (isTemplateId) {
if (isa<TranslationUnitDecl>(DC)) break;
} else {
if (DC->isFileContext()) break;
}
DC = DC->getParent();
}
There doesn't seem to be any possibility that DC->Equals(CurContext)
after this loop, since friends can only be declared in records; in any
case the error given only makes sense in a record context anyway. (The
same check is also present in another branch, but that one is OK since
it involves qualified names.)
Please let me know if I am correct and if this is OK to be patched.
Stephen
diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp
index f66509d..00c6162 100644
--- a/lib/Sema/SemaDeclCXX.cpp
+++ b/lib/Sema/SemaDeclCXX.cpp
@@ -10733,17 +10733,6 @@ NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D,
DC = DC->getParent();
}
- // C++ [class.friend]p1: A friend of a class is a function or
- // class that is not a member of the class . . .
- // C++11 changes this for both friend types and functions.
- // Most C++ 98 compilers do seem to give an error here, so
- // we do, too.
- if (!Previous.empty() && DC->Equals(CurContext))
- Diag(DS.getFriendSpecLoc(),
- getLangOpts().CPlusPlus11 ?
- diag::warn_cxx98_compat_friend_is_member :
- diag::err_friend_is_member);
-
DCScope = getScopeForDeclContext(S, DC);
// C++ [class.friend]p6:
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits