Author: Richard Smith Date: 2020-03-13T19:30:49-07:00 New Revision: 810794ce882850a11baca35aa4ef107ee8ee7f53
URL: https://github.com/llvm/llvm-project/commit/810794ce882850a11baca35aa4ef107ee8ee7f53 DIFF: https://github.com/llvm/llvm-project/commit/810794ce882850a11baca35aa4ef107ee8ee7f53.diff LOG: PR44992 Don't crash when a defaulted <=> is in a class declared in a transparent context. (The same crash would happen if a class template with a friend was declared in an 'export' block, but there are more issues with that case.) Added: Modified: clang/lib/Sema/SemaTemplateInstantiateDecl.cpp clang/test/SemaCXX/compare-cxx2a.cpp Removed: ################################################################################ diff --git a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp index 109b64921507..875eb2bfb940 100755 --- a/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp @@ -2039,7 +2039,7 @@ Decl *TemplateDeclInstantiator::VisitFunctionDecl( // Look only into the namespace where the friend would be declared to // find a previous declaration. This is the innermost enclosing namespace, // as described in ActOnFriendFunctionDecl. - SemaRef.LookupQualifiedName(Previous, DC); + SemaRef.LookupQualifiedName(Previous, DC->getRedeclContext()); // In C++, the previous declaration we find might be a tag type // (class or enum). In this case, the new declaration will hide the diff --git a/clang/test/SemaCXX/compare-cxx2a.cpp b/clang/test/SemaCXX/compare-cxx2a.cpp index 46e38f787db4..a45955418c44 100644 --- a/clang/test/SemaCXX/compare-cxx2a.cpp +++ b/clang/test/SemaCXX/compare-cxx2a.cpp @@ -426,3 +426,9 @@ namespace Vector { (void)(v1 <=> v2); // expected-error {{three-way comparison between vectors is not supported}} } } + +namespace PR44992 { + extern "C++" struct s { + friend auto operator<=>(s const &, s const &) = default; + }; +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits