diff options
Diffstat (limited to 'clang/lib/Sema/SemaDeclCXX.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index 2fe520b8238..0f7f0ffa75a 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -13786,9 +13786,14 @@ NamedDecl *Sema::ActOnFriendFunctionDecl(Scope *S, Declarator &D, // and shall be the only declaration of the function or function // template in the translation unit. if (functionDeclHasDefaultArgument(FD)) { - if (FunctionDecl *OldFD = FD->getPreviousDecl()) { + // We can't look at FD->getPreviousDecl() because it may not have been set + // if we're in a dependent context. If we get this far with a non-empty + // Previous set, we must have a valid previous declaration of this + // function. + if (!Previous.empty()) { Diag(FD->getLocation(), diag::err_friend_decl_with_def_arg_redeclared); - Diag(OldFD->getLocation(), diag::note_previous_declaration); + Diag(Previous.getRepresentativeDecl()->getLocation(), + diag::note_previous_declaration); } else if (!D.isFunctionDefinition()) Diag(FD->getLocation(), diag::err_friend_decl_with_def_arg_must_be_def); } |

