Re: r310691 - PR33489: A function-style cast to a deduced class template specialization type is type-dependent if it can't be resolved due to a type-dependent argument.
Thanks! r310719. On Thu, Aug 10, 2017 at 7:08 PM, Richard Smith wrote: > Hi Hans, this fixes a bug you wanted to treat as a 5.0 release blocker, so > should be ported to the branch :) > > On 10 August 2017 at 19:04, Richard Smith via cfe-commits > wrote: >> >> Author: rsmith >> Date: Thu Aug 10 19:04:19 2017 >> New Revision: 310691 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=310691&view=rev >> Log: >> PR33489: A function-style cast to a deduced class template specialization >> type is type-dependent if it can't be resolved due to a type-dependent >> argument. >> >> Modified: >> cfe/trunk/lib/AST/ExprCXX.cpp >> cfe/trunk/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp >> >> Modified: cfe/trunk/lib/AST/ExprCXX.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ExprCXX.cpp?rev=310691&r1=310690&r2=310691&view=diff >> >> == >> --- cfe/trunk/lib/AST/ExprCXX.cpp (original) >> +++ cfe/trunk/lib/AST/ExprCXX.cpp Thu Aug 10 19:04:19 2017 >> @@ -1052,7 +1052,9 @@ CXXUnresolvedConstructExpr::CXXUnresolve >>:Type->getType()->isRValueReferenceType()? VK_XValue >>:VK_RValue), >> OK_Ordinary, >> - Type->getType()->isDependentType(), true, true, >> + Type->getType()->isDependentType() || >> + Type->getType()->getContainedDeducedType(), >> + true, true, >> Type->getType()->containsUnexpandedParameterPack()), >> Type(Type), >> LParenLoc(LParenLoc), >> >> Modified: >> cfe/trunk/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp >> URL: >> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp?rev=310691&r1=310690&r2=310691&view=diff >> >> == >> --- cfe/trunk/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp >> (original) >> +++ cfe/trunk/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp Thu >> Aug 10 19:04:19 2017 >> @@ -286,6 +286,29 @@ namespace tuple_tests { >>} >> } >> >> +namespace dependent { >> + template struct X { >> +X(T); >> + }; >> + template int Var(T t) { >> +X x(t); >> +return X(x) + 1; // expected-error {{invalid operands}} >> + } >> + template int Cast(T t) { >> +return X(X(t)) + 1; // expected-error {{invalid operands}} >> + } >> + template int New(T t) { >> +return X(new X(t)) + 1; // expected-error {{invalid operands}} >> + }; >> + template int Var(float); // expected-note {{instantiation of}} >> + template int Cast(float); // expected-note {{instantiation of}} >> + template int New(float); // expected-note {{instantiation of}} >> + template int operator+(X, int); >> + template int Var(int); >> + template int Cast(int); >> + template int New(int); >> +} >> + >> #else >> >> // expected-no-diagnostics >> >> >> ___ >> 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
Re: r310691 - PR33489: A function-style cast to a deduced class template specialization type is type-dependent if it can't be resolved due to a type-dependent argument.
Hi Hans, this fixes a bug you wanted to treat as a 5.0 release blocker, so should be ported to the branch :) On 10 August 2017 at 19:04, Richard Smith via cfe-commits < cfe-commits@lists.llvm.org> wrote: > Author: rsmith > Date: Thu Aug 10 19:04:19 2017 > New Revision: 310691 > > URL: http://llvm.org/viewvc/llvm-project?rev=310691&view=rev > Log: > PR33489: A function-style cast to a deduced class template specialization > type is type-dependent if it can't be resolved due to a type-dependent > argument. > > Modified: > cfe/trunk/lib/AST/ExprCXX.cpp > cfe/trunk/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp > > Modified: cfe/trunk/lib/AST/ExprCXX.cpp > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ > ExprCXX.cpp?rev=310691&r1=310690&r2=310691&view=diff > > == > --- cfe/trunk/lib/AST/ExprCXX.cpp (original) > +++ cfe/trunk/lib/AST/ExprCXX.cpp Thu Aug 10 19:04:19 2017 > @@ -1052,7 +1052,9 @@ CXXUnresolvedConstructExpr::CXXUnresolve >:Type->getType()->isRValueReferenceType()? VK_XValue >:VK_RValue), > OK_Ordinary, > - Type->getType()->isDependentType(), true, true, > + Type->getType()->isDependentType() || > + Type->getType()->getContainedDeducedType(), > + true, true, > Type->getType()->containsUnexpandedParameterPack()), > Type(Type), > LParenLoc(LParenLoc), > > Modified: cfe/trunk/test/SemaCXX/cxx1z-class-template-argument- > deduction.cpp > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ > SemaCXX/cxx1z-class-template-argument-deduction.cpp?rev= > 310691&r1=310690&r2=310691&view=diff > > == > --- cfe/trunk/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp > (original) > +++ cfe/trunk/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp > Thu Aug 10 19:04:19 2017 > @@ -286,6 +286,29 @@ namespace tuple_tests { >} > } > > +namespace dependent { > + template struct X { > +X(T); > + }; > + template int Var(T t) { > +X x(t); > +return X(x) + 1; // expected-error {{invalid operands}} > + } > + template int Cast(T t) { > +return X(X(t)) + 1; // expected-error {{invalid operands}} > + } > + template int New(T t) { > +return X(new X(t)) + 1; // expected-error {{invalid operands}} > + }; > + template int Var(float); // expected-note {{instantiation of}} > + template int Cast(float); // expected-note {{instantiation of}} > + template int New(float); // expected-note {{instantiation of}} > + template int operator+(X, int); > + template int Var(int); > + template int Cast(int); > + template int New(int); > +} > + > #else > > // expected-no-diagnostics > > > ___ > 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
r310691 - PR33489: A function-style cast to a deduced class template specialization type is type-dependent if it can't be resolved due to a type-dependent argument.
Author: rsmith Date: Thu Aug 10 19:04:19 2017 New Revision: 310691 URL: http://llvm.org/viewvc/llvm-project?rev=310691&view=rev Log: PR33489: A function-style cast to a deduced class template specialization type is type-dependent if it can't be resolved due to a type-dependent argument. Modified: cfe/trunk/lib/AST/ExprCXX.cpp cfe/trunk/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp Modified: cfe/trunk/lib/AST/ExprCXX.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ExprCXX.cpp?rev=310691&r1=310690&r2=310691&view=diff == --- cfe/trunk/lib/AST/ExprCXX.cpp (original) +++ cfe/trunk/lib/AST/ExprCXX.cpp Thu Aug 10 19:04:19 2017 @@ -1052,7 +1052,9 @@ CXXUnresolvedConstructExpr::CXXUnresolve :Type->getType()->isRValueReferenceType()? VK_XValue :VK_RValue), OK_Ordinary, - Type->getType()->isDependentType(), true, true, + Type->getType()->isDependentType() || + Type->getType()->getContainedDeducedType(), + true, true, Type->getType()->containsUnexpandedParameterPack()), Type(Type), LParenLoc(LParenLoc), Modified: cfe/trunk/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp?rev=310691&r1=310690&r2=310691&view=diff == --- cfe/trunk/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp (original) +++ cfe/trunk/test/SemaCXX/cxx1z-class-template-argument-deduction.cpp Thu Aug 10 19:04:19 2017 @@ -286,6 +286,29 @@ namespace tuple_tests { } } +namespace dependent { + template struct X { +X(T); + }; + template int Var(T t) { +X x(t); +return X(x) + 1; // expected-error {{invalid operands}} + } + template int Cast(T t) { +return X(X(t)) + 1; // expected-error {{invalid operands}} + } + template int New(T t) { +return X(new X(t)) + 1; // expected-error {{invalid operands}} + }; + template int Var(float); // expected-note {{instantiation of}} + template int Cast(float); // expected-note {{instantiation of}} + template int New(float); // expected-note {{instantiation of}} + template int operator+(X, int); + template int Var(int); + template int Cast(int); + template int New(int); +} + #else // expected-no-diagnostics ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits