If r322350 is temporary fix, I suggest r321395 may be reverted in release_60. Richard, how do you think?
On Wed, Jan 17, 2018 at 4:27 AM Richard Trieu via cfe-commits < cfe-commits@lists.llvm.org> wrote: > There was a different, possibly related, issue with templated methods that > I just disabled checking for methods all together in r321396 until I can > investigate further. > > > On Mon, Jan 15, 2018 at 10:45 AM, David Blaikie <dblai...@gmail.com> > wrote: > >> I'm surprised this problem is unique to friend functions with definitions >> inline and the friend declaration site - doesn't a similar issue occur with >> member functions of templates that are not instantiated in some (similar) >> contexts? >> >> Is there a common solution that could be used for both cases? >> >> >> On Thu, Jan 11, 2018 at 8:43 PM Richard Trieu via cfe-commits < >> cfe-commits@lists.llvm.org> wrote: >> >>> Author: rtrieu >>> Date: Thu Jan 11 20:42:27 2018 >>> New Revision: 322350 >>> >>> URL: http://llvm.org/viewvc/llvm-project?rev=322350&view=rev >>> Log: >>> [ODRHash] Don't hash friend functions. >>> >>> In certain combinations of templated classes and friend functions, the >>> body >>> of friend functions does not get propagated along with function >>> signature. >>> Exclude friend functions for hashing to avoid this case. >>> >>> Added: >>> cfe/trunk/test/Modules/Inputs/odr_hash-Friend/ >>> cfe/trunk/test/Modules/Inputs/odr_hash-Friend/Box.h >>> cfe/trunk/test/Modules/Inputs/odr_hash-Friend/M1.h >>> cfe/trunk/test/Modules/Inputs/odr_hash-Friend/M2.h >>> cfe/trunk/test/Modules/Inputs/odr_hash-Friend/M3.h >>> cfe/trunk/test/Modules/Inputs/odr_hash-Friend/module.modulemap >>> cfe/trunk/test/Modules/odr_hash-Friend.cpp >>> Modified: >>> cfe/trunk/lib/AST/ODRHash.cpp >>> >>> Modified: cfe/trunk/lib/AST/ODRHash.cpp >>> URL: >>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ODRHash.cpp?rev=322350&r1=322349&r2=322350&view=diff >>> >>> ============================================================================== >>> --- cfe/trunk/lib/AST/ODRHash.cpp (original) >>> +++ cfe/trunk/lib/AST/ODRHash.cpp Thu Jan 11 20:42:27 2018 >>> @@ -478,6 +478,8 @@ void ODRHash::AddFunctionDecl(const Func >>> >>> // TODO: Fix hashing for class methods. >>> if (isa<CXXMethodDecl>(Function)) return; >>> + // And friend functions. >>> + if (Function->getFriendObjectKind()) return; >>> >>> // Skip functions that are specializations or in specialization >>> context. >>> const DeclContext *DC = Function; >>> >>> Added: cfe/trunk/test/Modules/Inputs/odr_hash-Friend/Box.h >>> URL: >>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/odr_hash-Friend/Box.h?rev=322350&view=auto >>> >>> ============================================================================== >>> --- cfe/trunk/test/Modules/Inputs/odr_hash-Friend/Box.h (added) >>> +++ cfe/trunk/test/Modules/Inputs/odr_hash-Friend/Box.h Thu Jan 11 >>> 20:42:27 2018 >>> @@ -0,0 +1,14 @@ >>> +template <class T> >>> +struct iterator { >>> + void Compare(const iterator &x) { } >>> + friend void Check(iterator) {} >>> +}; >>> + >>> +template <class T = int> struct Box { >>> + iterator<T> I; >>> + >>> + void test() { >>> + Check(I); >>> + I.Compare(I); >>> + } >>> +}; >>> >>> Added: cfe/trunk/test/Modules/Inputs/odr_hash-Friend/M1.h >>> URL: >>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/odr_hash-Friend/M1.h?rev=322350&view=auto >>> >>> ============================================================================== >>> --- cfe/trunk/test/Modules/Inputs/odr_hash-Friend/M1.h (added) >>> +++ cfe/trunk/test/Modules/Inputs/odr_hash-Friend/M1.h Thu Jan 11 >>> 20:42:27 2018 >>> @@ -0,0 +1,6 @@ >>> +#include "Box.h" >>> + >>> +void Peek() { >>> + Box<> Gift; >>> + Gift.test(); >>> +} >>> >>> Added: cfe/trunk/test/Modules/Inputs/odr_hash-Friend/M2.h >>> URL: >>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/odr_hash-Friend/M2.h?rev=322350&view=auto >>> >>> ============================================================================== >>> --- cfe/trunk/test/Modules/Inputs/odr_hash-Friend/M2.h (added) >>> +++ cfe/trunk/test/Modules/Inputs/odr_hash-Friend/M2.h Thu Jan 11 >>> 20:42:27 2018 >>> @@ -0,0 +1,5 @@ >>> +#include "Box.h" >>> +void x() { >>> + Box<> Unused; >>> + //Unused.test(); >>> +} >>> >>> Added: cfe/trunk/test/Modules/Inputs/odr_hash-Friend/M3.h >>> URL: >>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/odr_hash-Friend/M3.h?rev=322350&view=auto >>> >>> ============================================================================== >>> --- cfe/trunk/test/Modules/Inputs/odr_hash-Friend/M3.h (added) >>> +++ cfe/trunk/test/Modules/Inputs/odr_hash-Friend/M3.h Thu Jan 11 >>> 20:42:27 2018 >>> @@ -0,0 +1,7 @@ >>> +#include "Box.h" >>> +#include "M2.h" >>> + >>> +void Party() { >>> + Box<> Present; >>> + Present.test(); >>> +} >>> >>> Added: cfe/trunk/test/Modules/Inputs/odr_hash-Friend/module.modulemap >>> URL: >>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/odr_hash-Friend/module.modulemap?rev=322350&view=auto >>> >>> ============================================================================== >>> --- cfe/trunk/test/Modules/Inputs/odr_hash-Friend/module.modulemap >>> (added) >>> +++ cfe/trunk/test/Modules/Inputs/odr_hash-Friend/module.modulemap Thu >>> Jan 11 20:42:27 2018 >>> @@ -0,0 +1,15 @@ >>> +module Box { >>> + header "Box.h" >>> +} >>> + >>> +module Module1 { >>> + header "M1.h" >>> +} >>> + >>> +module Module2 { >>> + header "M2.h" >>> +} >>> + >>> +module Module3 { >>> + header "M3.h" >>> +} >>> >>> Added: cfe/trunk/test/Modules/odr_hash-Friend.cpp >>> URL: >>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/odr_hash-Friend.cpp?rev=322350&view=auto >>> >>> ============================================================================== >>> --- cfe/trunk/test/Modules/odr_hash-Friend.cpp (added) >>> +++ cfe/trunk/test/Modules/odr_hash-Friend.cpp Thu Jan 11 20:42:27 2018 >>> @@ -0,0 +1,19 @@ >>> +// RUN: rm -rf %t >>> + >>> +// RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t/modules.cache \ >>> +// RUN: -I %S/Inputs/odr_hash-Friend \ >>> +// RUN: -emit-obj -o /dev/null \ >>> +// RUN: -fmodules \ >>> +// RUN: -fimplicit-module-maps \ >>> +// RUN: -fmodules-cache-path=%t/modules.cache \ >>> +// RUN: -std=c++11 -x c++ %s -verify >>> + >>> +// expected-no-diagnostics >>> + >>> +#include "Box.h" >>> +#include "M1.h" >>> +#include "M3.h" >>> + >>> +void Run() { >>> + Box<> Present; >>> +} >>> >>> >>> _______________________________________________ >>> cfe-commits mailing list >>> cfe-commits@lists.llvm.org >>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >>> >> > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits