diff options
| author | Benjamin Kramer <benny.kra@googlemail.com> | 2017-04-17 20:57:40 +0000 |
|---|---|---|
| committer | Benjamin Kramer <benny.kra@googlemail.com> | 2017-04-17 20:57:40 +0000 |
| commit | dcb52b167ae374b23d3f0e37cac6249257927c9d (patch) | |
| tree | 23753db984b666f01b98050a212936bf2cebfc55 /clang/lib | |
| parent | b0cec31db2905aa8e1dcd80b70616b3d5c3e16e7 (diff) | |
| download | bcm5719-llvm-dcb52b167ae374b23d3f0e37cac6249257927c9d.tar.gz bcm5719-llvm-dcb52b167ae374b23d3f0e37cac6249257927c9d.zip | |
Revert "Address http://bugs.llvm.org/pr30994 so that a non-friend can properly replace a friend, and a visible friend can properly replace an invisible friend but not vice verse, and definitions are not replaced. This fixes the two FIXME in SemaTemplate/friend-template.cpp."
This reverts commit r300443. Breaks compiling libc++ with modules in
some configurations.
llvm-svn: 300497
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/AST/Decl.cpp | 4 | ||||
| -rw-r--r-- | clang/lib/AST/DeclBase.cpp | 15 |
2 files changed, 0 insertions, 19 deletions
diff --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp index 6a288cdb21f..2b22e5bb50a 100644 --- a/clang/lib/AST/Decl.cpp +++ b/clang/lib/AST/Decl.cpp @@ -1536,10 +1536,6 @@ bool NamedDecl::declarationReplaces(NamedDecl *OldD, bool IsKnownNewer) const { if (isa<ObjCMethodDecl>(this)) return false; - if (getFriendObjectKind() > OldD->getFriendObjectKind() && - !isThisDeclarationADefinition()) - return false; - // For parameters, pick the newer one. This is either an error or (in // Objective-C) permitted as an extension. if (isa<ParmVarDecl>(this)) diff --git a/clang/lib/AST/DeclBase.cpp b/clang/lib/AST/DeclBase.cpp index ae7444579b0..cda70c5edcd 100644 --- a/clang/lib/AST/DeclBase.cpp +++ b/clang/lib/AST/DeclBase.cpp @@ -861,21 +861,6 @@ const FunctionType *Decl::getFunctionType(bool BlocksToo) const { return Ty->getAs<FunctionType>(); } -bool Decl::isThisDeclarationADefinition() const { - if (auto *TD = dyn_cast<TagDecl>(this)) - return TD->isThisDeclarationADefinition(); - if (auto *FD = dyn_cast<FunctionDecl>(this)) - return FD->isThisDeclarationADefinition(); - if (auto *VD = dyn_cast<VarDecl>(this)) - return VD->isThisDeclarationADefinition(); - if (auto *CTD = dyn_cast<ClassTemplateDecl>(this)) - return CTD->isThisDeclarationADefinition(); - if (auto *FTD = dyn_cast<FunctionTemplateDecl>(this)) - return FTD->isThisDeclarationADefinition(); - if (auto *VTD = dyn_cast<VarTemplateDecl>(this)) - return VTD->isThisDeclarationADefinition(); - return false; -} /// Starting at a given context (a Decl or DeclContext), look for a /// code context that is not a closure (a lambda, block, etc.). |

