Merged in r322632.
On Wed, Jan 17, 2018 at 9:52 AM, NAKAMURA Takumi via cfe-commits <cfe-commits@lists.llvm.org> wrote: > That's good to hear. Thanks! > > > 2018年1月17日(水) 13:51 Richard Trieu <rtr...@google.com>: >> >> I feel it's best to merge this change into the release branch instead of >> reverting the previous change. I've filed a bug to request this revision, >> and a few others that fix the test case, to be merged. >> https://bugs.llvm.org/show_bug.cgi?id=35981 >> >> >> On Tue, Jan 16, 2018 at 2:44 PM, NAKAMURA Takumi <geek4ci...@gmail.com> >> wrote: >>> >>> 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 > _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits