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.

2017-08-11 Thread Hans Wennborg via cfe-commits
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.

2017-08-10 Thread Richard Smith via cfe-commits
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.

2017-08-10 Thread Richard Smith via cfe-commits
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