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.

Richard Smith via cfe-commits cfe-commits at lists.llvm.org
Thu Aug 10 19:08:23 PDT 2017


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 at 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<typename T> struct X {
> +    X(T);
> +  };
> +  template<typename T> int Var(T t) {
> +    X x(t);
> +    return X(x) + 1; // expected-error {{invalid operands}}
> +  }
> +  template<typename T> int Cast(T t) {
> +    return X(X(t)) + 1; // expected-error {{invalid operands}}
> +  }
> +  template<typename T> 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<typename T> int operator+(X<T>, int);
> +  template int Var(int);
> +  template int Cast(int);
> +  template int New(int);
> +}
> +
>  #else
>
>  // expected-no-diagnostics
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170810/dfbb8d8d/attachment-0001.html>


More information about the cfe-commits mailing list