forked from OSchip/llvm-project
Make sure we correctly treat __is_convertible_to as an unevaluated context. PR11833.
llvm-svn: 148893
This commit is contained in:
parent
9aa95b16e1
commit
a59b1907cc
|
@ -3166,8 +3166,9 @@ static bool EvaluateBinaryTypeTrait(Sema &Self, BinaryTypeTrait BTT,
|
|||
InitializationKind Kind(InitializationKind::CreateCopy(KeyLoc,
|
||||
SourceLocation()));
|
||||
|
||||
// Perform the initialization within a SFINAE trap at translation unit
|
||||
// scope.
|
||||
// Perform the initialization in an unevaluated context within a SFINAE
|
||||
// trap at translation unit scope.
|
||||
EnterExpressionEvaluationContext Unevaluated(Self, Sema::Unevaluated);
|
||||
Sema::SFINAETrap SFINAE(Self, /*AccessCheckingSFINAE=*/true);
|
||||
Sema::ContextRAII TUContext(Self, Self.Context.getTranslationUnitDecl());
|
||||
InitializationSequence Init(Self, To, Kind, &FromPtr, 1);
|
||||
|
|
|
@ -1543,6 +1543,12 @@ void is_convertible_to() {
|
|||
{ int arr[T(__is_convertible_to(X0<int>, X0<float>))]; }
|
||||
}
|
||||
|
||||
namespace is_convertible_to_instantiate {
|
||||
// Make sure we don't try to instantiate the constructor.
|
||||
template<int x> class A { A(int) { int a[x]; } };
|
||||
int x = __is_convertible_to(int, A<-1>);
|
||||
}
|
||||
|
||||
void is_trivial()
|
||||
{
|
||||
{ int arr[T(__is_trivial(int))]; }
|
||||
|
|
Loading…
Reference in New Issue