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.

Hans Wennborg via cfe-commits cfe-commits at lists.llvm.org
Fri Aug 11 08:59:55 PDT 2017


Thanks! r310719.

On Thu, Aug 10, 2017 at 7:08 PM, Richard Smith <richard at metafoo.co.uk> 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
> <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
>
>


More information about the cfe-commits mailing list