On 12/4/18 7:07 PM, Richard Smith wrote:
On Tue, 4 Dec 2018 at 16:46, Erik Pilkington via cfe-commits <cfe-commits@lists.llvm.org <mailto:cfe-commits@lists.llvm.org>> wrote:

    Author: epilk
    Date: Tue Dec  4 16:43:11 2018
    New Revision: 348325

    URL: http://llvm.org/viewvc/llvm-project?rev=348325&view=rev
    Log:
    [Sema] Remove some conditions of a failing assert

    We should have been checking that this state is consistent, but its
    possible for it to be filled later, so it isn't really sound to check
    it here anyways.

    Fixes llvm.org/PR39742 <http://llvm.org/PR39742>

    Modified:
        cfe/trunk/lib/AST/DeclTemplate.cpp
        cfe/trunk/test/SemaCXX/friend-template-redecl.cpp

    Modified: cfe/trunk/lib/AST/DeclTemplate.cpp
    URL:
    
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclTemplate.cpp?rev=348325&r1=348324&r2=348325&view=diff
    
==============================================================================
    --- cfe/trunk/lib/AST/DeclTemplate.cpp (original)
    +++ cfe/trunk/lib/AST/DeclTemplate.cpp Tue Dec  4 16:43:11 2018
    @@ -329,8 +329,6 @@ void FunctionTemplateDecl::mergePrevDecl

       // Ensure we don't leak any important state.
       assert(ThisCommon->Specializations.size() == 0 &&
    -  !ThisCommon->InstantiatedFromMember.getPointer() &&
    -         !ThisCommon->InstantiatedFromMember.getInt() &&
              "Can't merge incompatible declarations!");

       Base::Common = PrevCommon;

    Modified: cfe/trunk/test/SemaCXX/friend-template-redecl.cpp
    URL:
    
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/friend-template-redecl.cpp?rev=348325&r1=348324&r2=348325&view=diff
    
==============================================================================
    --- cfe/trunk/test/SemaCXX/friend-template-redecl.cpp (original)
    +++ cfe/trunk/test/SemaCXX/friend-template-redecl.cpp Tue Dec  4
    16:43:11 2018
    @@ -18,3 +18,14 @@ void f() {
       foo(x);
       bar(x);
     }
    +
    +namespace PR39742 {
    +template<typename>
    +struct wrapper {
    +  template<typename>
    +  friend void friend_function_template() {}
    +};
    +
    +wrapper<bool> x;
    +wrapper<int> y;


This is ill-formed due to the redefinition of the template; we should at least have a FIXME to properly reject it.

Ah, good point. Added a FIXME in r348388. The fix for this is https://reviews.llvm.org/D21508.

Thanks!

    +}


    _______________________________________________
    cfe-commits mailing list
    cfe-commits@lists.llvm.org <mailto: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

Reply via email to