110 changes: 56 additions & 54 deletions clang/lib/Sema/SemaExpr.cpp

Large diffs are not rendered by default.

125 changes: 72 additions & 53 deletions clang/lib/Sema/SemaExprCXX.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2238,7 +2238,7 @@ Sema::BuildCXXNew(SourceRange Range, bool UseGlobal,
SizeTy, SourceLocation());
// Otherwise, if we failed to constant-fold the allocation size, we'll
// just give up and pass-in something opaque, that isn't a null pointer.
OpaqueValueExpr OpaqueAllocationSize(SourceLocation(), SizeTy, VK_RValue,
OpaqueValueExpr OpaqueAllocationSize(SourceLocation(), SizeTy, VK_PRValue,
OK_Ordinary, /*SourceExpr=*/nullptr);

// Let's synthesize the alignment argument in case we will need it.
Expand All @@ -2254,7 +2254,7 @@ Sema::BuildCXXNew(SourceRange Range, bool UseGlobal,
SizeTy, SourceLocation());
ImplicitCastExpr DesiredAlignment(ImplicitCastExpr::OnStack, AlignValT,
CK_IntegralCast, &AlignmentLiteral,
VK_RValue, FPOptionsOverride());
VK_PRValue, FPOptionsOverride());

// Adjust placement args by prepending conjured size and alignment exprs.
llvm::SmallVector<Expr *, 8> CallArgs;
Expand Down Expand Up @@ -4188,7 +4188,7 @@ Sema::PerformImplicitConversion(Expr *From, QualType ToType,
if (const AtomicType *FromAtomic = FromType->getAs<AtomicType>()) {
FromType = FromAtomic->getValueType().getUnqualifiedType();
From = ImplicitCastExpr::Create(Context, FromType, CK_AtomicToNonAtomic,
From, /*BasePath=*/nullptr, VK_RValue,
From, /*BasePath=*/nullptr, VK_PRValue,
FPOptionsOverride());
}
break;
Expand All @@ -4206,14 +4206,16 @@ Sema::PerformImplicitConversion(Expr *From, QualType ToType,

case ICK_Array_To_Pointer:
FromType = Context.getArrayDecayedType(FromType);
From = ImpCastExprToType(From, FromType, CK_ArrayToPointerDecay,
VK_RValue, /*BasePath=*/nullptr, CCK).get();
From = ImpCastExprToType(From, FromType, CK_ArrayToPointerDecay, VK_PRValue,
/*BasePath=*/nullptr, CCK)
.get();
break;

case ICK_Function_To_Pointer:
FromType = Context.getPointerType(FromType);
From = ImpCastExprToType(From, FromType, CK_FunctionToPointerDecay,
VK_RValue, /*BasePath=*/nullptr, CCK).get();
VK_PRValue, /*BasePath=*/nullptr, CCK)
.get();
break;

default:
Expand Down Expand Up @@ -4255,18 +4257,21 @@ Sema::PerformImplicitConversion(Expr *From, QualType ToType,
assert(FromType->castAs<EnumType>()->getDecl()->isFixed() &&
SCS.Second == ICK_Integral_Promotion &&
"only enums with fixed underlying type can promote to bool");
From = ImpCastExprToType(From, ToType, CK_IntegralToBoolean,
VK_RValue, /*BasePath=*/nullptr, CCK).get();
From = ImpCastExprToType(From, ToType, CK_IntegralToBoolean, VK_PRValue,
/*BasePath=*/nullptr, CCK)
.get();
} else {
From = ImpCastExprToType(From, ToType, CK_IntegralCast,
VK_RValue, /*BasePath=*/nullptr, CCK).get();
From = ImpCastExprToType(From, ToType, CK_IntegralCast, VK_PRValue,
/*BasePath=*/nullptr, CCK)
.get();
}
break;

case ICK_Floating_Promotion:
case ICK_Floating_Conversion:
From = ImpCastExprToType(From, ToType, CK_FloatingCast,
VK_RValue, /*BasePath=*/nullptr, CCK).get();
From = ImpCastExprToType(From, ToType, CK_FloatingCast, VK_PRValue,
/*BasePath=*/nullptr, CCK)
.get();
break;

case ICK_Complex_Promotion:
Expand All @@ -4284,18 +4289,21 @@ Sema::PerformImplicitConversion(Expr *From, QualType ToType,
} else {
CK = CK_IntegralComplexCast;
}
From = ImpCastExprToType(From, ToType, CK,
VK_RValue, /*BasePath=*/nullptr, CCK).get();
From = ImpCastExprToType(From, ToType, CK, VK_PRValue, /*BasePath=*/nullptr,
CCK)
.get();
break;
}

case ICK_Floating_Integral:
if (ToType->isRealFloatingType())
From = ImpCastExprToType(From, ToType, CK_IntegralToFloating,
VK_RValue, /*BasePath=*/nullptr, CCK).get();
From = ImpCastExprToType(From, ToType, CK_IntegralToFloating, VK_PRValue,
/*BasePath=*/nullptr, CCK)
.get();
else
From = ImpCastExprToType(From, ToType, CK_FloatingToIntegral,
VK_RValue, /*BasePath=*/nullptr, CCK).get();
From = ImpCastExprToType(From, ToType, CK_FloatingToIntegral, VK_PRValue,
/*BasePath=*/nullptr, CCK)
.get();
break;

case ICK_Compatible_Conversion:
Expand Down Expand Up @@ -4363,8 +4371,8 @@ Sema::PerformImplicitConversion(Expr *From, QualType ToType,
}
if (getLangOpts().allowsNonTrivialObjCLifetimeQualifiers())
CheckObjCConversion(SourceRange(), NewToType, From, CCK);
From = ImpCastExprToType(From, NewToType, Kind, VK_RValue, &BasePath, CCK)
.get();
From = ImpCastExprToType(From, NewToType, Kind, VK_PRValue, &BasePath, CCK)
.get();
break;
}

Expand All @@ -4383,8 +4391,8 @@ Sema::PerformImplicitConversion(Expr *From, QualType ToType,
(void)isCompleteType(From->getExprLoc(), ToType);
}

From = ImpCastExprToType(From, ToType, Kind, VK_RValue, &BasePath, CCK)
.get();
From =
ImpCastExprToType(From, ToType, Kind, VK_PRValue, &BasePath, CCK).get();
break;
}

Expand All @@ -4396,8 +4404,9 @@ Sema::PerformImplicitConversion(Expr *From, QualType ToType,
}

From = ImpCastExprToType(From, Context.BoolTy,
ScalarTypeToBooleanCastKind(FromType),
VK_RValue, /*BasePath=*/nullptr, CCK).get();
ScalarTypeToBooleanCastKind(FromType), VK_PRValue,
/*BasePath=*/nullptr, CCK)
.get();
break;

case ICK_Derived_To_Base: {
Expand All @@ -4414,21 +4423,23 @@ Sema::PerformImplicitConversion(Expr *From, QualType ToType,
}

case ICK_Vector_Conversion:
From = ImpCastExprToType(From, ToType, CK_BitCast,
VK_RValue, /*BasePath=*/nullptr, CCK).get();
From = ImpCastExprToType(From, ToType, CK_BitCast, VK_PRValue,
/*BasePath=*/nullptr, CCK)
.get();
break;

case ICK_SVE_Vector_Conversion:
From = ImpCastExprToType(From, ToType, CK_BitCast, VK_RValue,
From = ImpCastExprToType(From, ToType, CK_BitCast, VK_PRValue,
/*BasePath=*/nullptr, CCK)
.get();
break;

case ICK_Vector_Splat: {
// Vector splat from any arithmetic type to a vector.
Expr *Elem = prepareVectorSplat(ToType, From).get();
From = ImpCastExprToType(Elem, ToType, CK_VectorSplat, VK_RValue,
/*BasePath=*/nullptr, CCK).get();
From = ImpCastExprToType(Elem, ToType, CK_VectorSplat, VK_PRValue,
/*BasePath=*/nullptr, CCK)
.get();
break;
}

Expand Down Expand Up @@ -4462,22 +4473,27 @@ Sema::PerformImplicitConversion(Expr *From, QualType ToType,

// _Complex x -> x
From = ImpCastExprToType(From, ElType,
isFloatingComplex ? CK_FloatingComplexToReal
: CK_IntegralComplexToReal,
VK_RValue, /*BasePath=*/nullptr, CCK).get();
isFloatingComplex ? CK_FloatingComplexToReal
: CK_IntegralComplexToReal,
VK_PRValue, /*BasePath=*/nullptr, CCK)
.get();

// x -> y
if (Context.hasSameUnqualifiedType(ElType, ToType)) {
// do nothing
} else if (ToType->isRealFloatingType()) {
From = ImpCastExprToType(From, ToType,
isFloatingComplex ? CK_FloatingCast : CK_IntegralToFloating,
VK_RValue, /*BasePath=*/nullptr, CCK).get();
isFloatingComplex ? CK_FloatingCast
: CK_IntegralToFloating,
VK_PRValue, /*BasePath=*/nullptr, CCK)
.get();
} else {
assert(ToType->isIntegerType());
From = ImpCastExprToType(From, ToType,
isFloatingComplex ? CK_FloatingToIntegral : CK_IntegralCast,
VK_RValue, /*BasePath=*/nullptr, CCK).get();
isFloatingComplex ? CK_FloatingToIntegral
: CK_IntegralCast,
VK_PRValue, /*BasePath=*/nullptr, CCK)
.get();
}
}
break;
Expand All @@ -4492,7 +4508,8 @@ Sema::PerformImplicitConversion(Expr *From, QualType ToType,
CastKind Kind =
AddrSpaceL != AddrSpaceR ? CK_AddressSpaceConversion : CK_BitCast;
From = ImpCastExprToType(From, ToType.getUnqualifiedType(), Kind,
VK_RValue, /*BasePath=*/nullptr, CCK).get();
VK_PRValue, /*BasePath=*/nullptr, CCK)
.get();
break;
}

Expand Down Expand Up @@ -4538,8 +4555,9 @@ Sema::PerformImplicitConversion(Expr *From, QualType ToType,
if (CheckExceptionSpecCompatibility(From, ToType))
return ExprError();

From = ImpCastExprToType(From, ToType, CK_NoOp,
VK_RValue, /*BasePath=*/nullptr, CCK).get();
From = ImpCastExprToType(From, ToType, CK_NoOp, VK_PRValue,
/*BasePath=*/nullptr, CCK)
.get();
break;

case ICK_Qualification: {
Expand Down Expand Up @@ -4582,13 +4600,14 @@ Sema::PerformImplicitConversion(Expr *From, QualType ToType,
assert(Context.hasSameType(
ToAtomicType->castAs<AtomicType>()->getValueType(), From->getType()));
From = ImpCastExprToType(From, ToAtomicType, CK_NonAtomicToAtomic,
VK_RValue, nullptr, CCK).get();
VK_PRValue, nullptr, CCK)
.get();
}

// Materialize a temporary if we're implicitly converting to a reference
// type. This is not required by the C++ rules but is necessary to maintain
// AST invariants.
if (ToType->isReferenceType() && From->isRValue()) {
if (ToType->isReferenceType() && From->isPRValue()) {
ExprResult Res = TemporaryMaterializationConversion(From);
if (Res.isInvalid())
return ExprError();
Expand Down Expand Up @@ -5641,7 +5660,8 @@ ExprResult Sema::ActOnExpressionTrait(ExpressionTrait ET,
static bool EvaluateExpressionTrait(ExpressionTrait ET, Expr *E) {
switch (ET) {
case ET_IsLValueExpr: return E->isLValue();
case ET_IsRValueExpr: return E->isRValue();
case ET_IsRValueExpr:
return E->isPRValue();
}
llvm_unreachable("Expression trait not covered by switch");
}
Expand Down Expand Up @@ -5676,7 +5696,7 @@ QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS,
// temporary materialization conversion otherwise.
if (isIndirect)
LHS = DefaultLvalueConversion(LHS.get());
else if (LHS.get()->isRValue())
else if (LHS.get()->isPRValue())
LHS = TemporaryMaterializationConversion(LHS.get());
if (LHS.isInvalid())
return QualType();
Expand Down Expand Up @@ -5746,7 +5766,7 @@ QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS,
QualType UseType = Context.getQualifiedType(Class, LHSType.getQualifiers());
if (isIndirect)
UseType = Context.getPointerType(UseType);
ExprValueKind VK = isIndirect ? VK_RValue : LHS.get()->getValueKind();
ExprValueKind VK = isIndirect ? VK_PRValue : LHS.get()->getValueKind();
LHS = ImpCastExprToType(LHS.get(), UseType, CK_DerivedToBase, VK,
&BasePath);
}
Expand Down Expand Up @@ -5808,7 +5828,7 @@ QualType Sema::CheckPointerToMemberOperands(ExprResult &LHS, ExprResult &RHS,
// result of an ->* expression is an lvalue if its second operand
// is a pointer to data member and a prvalue otherwise.
if (Result->isFunctionType()) {
VK = VK_RValue;
VK = VK_PRValue;
return Context.BoundMemberTy;
} else if (isIndirect) {
VK = VK_LValue;
Expand Down Expand Up @@ -6121,7 +6141,7 @@ QualType Sema::CXXCheckConditionalOperands(ExprResult &Cond, ExprResult &LHS,
// pointers.

// Assume r-value.
VK = VK_RValue;
VK = VK_PRValue;
OK = OK_Ordinary;
bool IsVectorConditional =
isValidVectorForConditionalCondition(Context, Cond.get()->getType());
Expand Down Expand Up @@ -6246,8 +6266,7 @@ QualType Sema::CXXCheckConditionalOperands(ExprResult &Cond, ExprResult &LHS,
// that instead?
ExprValueKind LVK = LHS.get()->getValueKind();
ExprValueKind RVK = RHS.get()->getValueKind();
if (!Context.hasSameType(LTy, RTy) &&
LVK == RVK && LVK != VK_RValue) {
if (!Context.hasSameType(LTy, RTy) && LVK == RVK && LVK != VK_PRValue) {
// DerivedToBase was already handled by the class-specific case above.
// FIXME: Should we allow ObjC conversions here?
const ReferenceConversions AllowedConversions =
Expand Down Expand Up @@ -6282,7 +6301,7 @@ QualType Sema::CXXCheckConditionalOperands(ExprResult &Cond, ExprResult &LHS,
// We only extend this to bitfields, not to the crazy other kinds of
// l-values.
bool Same = Context.hasSameType(LTy, RTy);
if (Same && LVK == RVK && LVK != VK_RValue &&
if (Same && LVK == RVK && LVK != VK_PRValue &&
LHS.get()->isOrdinaryOrBitFieldObject() &&
RHS.get()->isOrdinaryOrBitFieldObject()) {
VK = LHS.get()->getValueKind();
Expand Down Expand Up @@ -6853,7 +6872,7 @@ ExprResult Sema::MaybeBindToTemporary(Expr *E) {
assert(!isa<CXXBindTemporaryExpr>(E) && "Double-bound temporary?");

// If the result is a glvalue, we shouldn't bind it.
if (!E->isRValue())
if (!E->isPRValue())
return E;

// In ARC, calls that return a retainable type can return retained,
Expand Down Expand Up @@ -6945,7 +6964,7 @@ ExprResult Sema::MaybeBindToTemporary(Expr *E) {
CastKind ck = (ReturnsRetained ? CK_ARCConsumeObject
: CK_ARCReclaimReturnedObject);
return ImplicitCastExpr::Create(Context, E->getType(), ck, E, nullptr,
VK_RValue, FPOptionsOverride());
VK_PRValue, FPOptionsOverride());
}

if (E->getType().isDestructedType() == QualType::DK_nontrivial_c_struct)
Expand Down Expand Up @@ -7738,7 +7757,7 @@ ExprResult Sema::BuildCXXMemberCallExpr(Expr *E, NamedDecl *FoundDecl,
NestedNameSpecifierLoc(), SourceLocation(), Method,
DeclAccessPair::make(FoundDecl, FoundDecl->getAccess()),
HadMultipleCandidates, DeclarationNameInfo(),
Context.BoundMemberTy, VK_RValue, OK_Ordinary);
Context.BoundMemberTy, VK_PRValue, OK_Ordinary);

QualType ResultType = Method->getReturnType();
ExprValueKind VK = Expr::getValueKindForType(ResultType);
Expand Down Expand Up @@ -7825,7 +7844,7 @@ ExprResult Sema::IgnoredValueConversions(Expr *E) {
// [Except in specific positions,] an lvalue that does not have
// array type is converted to the value stored in the
// designated object (and is no longer an lvalue).
if (E->isRValue()) {
if (E->isPRValue()) {
// In C, function designators (i.e. expressions of function type)
// are r-values, but we still want to do function-to-pointer decay
// on them. This is both technically correct and convenient for
Expand Down
17 changes: 9 additions & 8 deletions clang/lib/Sema/SemaExprMember.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -408,7 +408,8 @@ CheckExtVectorComponent(Sema &S, QualType baseType, ExprValueKind &VK,
if (CompSize == 1)
return vecType->getElementType();

if (HasRepeated) VK = VK_RValue;
if (HasRepeated)
VK = VK_PRValue;

QualType VT = S.Context.getExtVectorType(vecType->getElementType(), CompSize);
// Now look up the TypeDefDecl from the vector type. Without this,
Expand Down Expand Up @@ -909,7 +910,8 @@ MemberExpr *Sema::BuildMemberExpr(
bool HadMultipleCandidates, const DeclarationNameInfo &MemberNameInfo,
QualType Ty, ExprValueKind VK, ExprObjectKind OK,
const TemplateArgumentListInfo *TemplateArgs) {
assert((!IsArrow || Base->isRValue()) && "-> base must be a pointer rvalue");
assert((!IsArrow || Base->isPRValue()) &&
"-> base must be a pointer prvalue");
MemberExpr *E =
MemberExpr::Create(Context, Base, IsArrow, OpLoc, NNS, TemplateKWLoc,
Member, FoundDecl, MemberNameInfo, TemplateArgs, Ty,
Expand Down Expand Up @@ -963,14 +965,13 @@ Sema::BuildMemberReferenceExpr(Expr *BaseExpr, QualType BaseExprType,

// C++1z [expr.ref]p2:
// For the first option (dot) the first expression shall be a glvalue [...]
if (!IsArrow && BaseExpr && BaseExpr->isRValue()) {
if (!IsArrow && BaseExpr && BaseExpr->isPRValue()) {
ExprResult Converted = TemporaryMaterializationConversion(BaseExpr);
if (Converted.isInvalid())
return ExprError();
BaseExpr = Converted.get();
}


const DeclarationNameInfo &MemberNameInfo = R.getLookupNameInfo();
DeclarationName MemberName = MemberNameInfo.getName();
SourceLocation MemberLoc = MemberNameInfo.getLoc();
Expand Down Expand Up @@ -1118,7 +1119,7 @@ Sema::BuildMemberReferenceExpr(Expr *BaseExpr, QualType BaseExprType,
ExprValueKind valueKind;
QualType type;
if (MemberFn->isInstance()) {
valueKind = VK_RValue;
valueKind = VK_PRValue;
type = Context.BoundMemberTy;
} else {
valueKind = VK_LValue;
Expand All @@ -1134,7 +1135,7 @@ Sema::BuildMemberReferenceExpr(Expr *BaseExpr, QualType BaseExprType,
if (EnumConstantDecl *Enum = dyn_cast<EnumConstantDecl>(MemberDecl)) {
return BuildMemberExpr(BaseExpr, IsArrow, OpLoc, &SS, TemplateKWLoc, Enum,
FoundDecl, /*HadMultipleCandidates=*/false,
MemberNameInfo, Enum->getType(), VK_RValue,
MemberNameInfo, Enum->getType(), VK_PRValue,
OK_Ordinary);
}

Expand Down Expand Up @@ -1778,9 +1779,9 @@ Sema::BuildFieldReferenceExpr(Expr *BaseExpr, bool IsArrow,
if (BaseExpr->getObjectKind() == OK_Ordinary)
VK = BaseExpr->getValueKind();
else
VK = VK_RValue;
VK = VK_PRValue;
}
if (VK != VK_RValue && Field->isBitField())
if (VK != VK_PRValue && Field->isBitField())
OK = OK_BitField;

// Figure out the type of the member; see C99 6.5.2.3p3, C++ [expr.ref]
Expand Down
18 changes: 9 additions & 9 deletions clang/lib/Sema/SemaExprObjC.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1786,7 +1786,7 @@ bool Sema::CheckMessageArgumentTypes(
} else {
ReturnType = Context.getObjCIdType();
}
VK = VK_RValue;
VK = VK_PRValue;
return false;
}

Expand Down Expand Up @@ -1873,7 +1873,7 @@ bool Sema::CheckMessageArgumentTypes(
// If we are type-erasing a block to a block-compatible
// Objective-C pointer type, we may need to extend the lifetime
// of the block object.
if (typeArgs && Args[i]->isRValue() && paramType->isBlockPointerType() &&
if (typeArgs && Args[i]->isPRValue() && paramType->isBlockPointerType() &&
Args[i]->getType()->isBlockPointerType() &&
origParamType->isObjCObjectPointerType()) {
ExprResult arg = Args[i];
Expand Down Expand Up @@ -2634,7 +2634,7 @@ ExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo,
Expr **Args = ArgsIn.data();
assert(SuperLoc.isInvalid() && "Message to super with dependent type");
return ObjCMessageExpr::Create(
Context, ReceiverType, VK_RValue, LBracLoc, ReceiverTypeInfo, Sel,
Context, ReceiverType, VK_PRValue, LBracLoc, ReceiverTypeInfo, Sel,
SelectorLocs, /*Method=*/nullptr, makeArrayRef(Args, NumArgs), RBracLoc,
isImplicit);
}
Expand Down Expand Up @@ -2682,7 +2682,7 @@ ExprResult Sema::BuildClassMessage(TypeSourceInfo *ReceiverTypeInfo,

// Check the argument types and determine the result type.
QualType ReturnType;
ExprValueKind VK = VK_RValue;
ExprValueKind VK = VK_PRValue;

unsigned NumArgs = ArgsIn.size();
Expr **Args = ArgsIn.data();
Expand Down Expand Up @@ -2887,7 +2887,7 @@ ExprResult Sema::BuildInstanceMessage(Expr *Receiver,
Expr **Args = ArgsIn.data();
assert(SuperLoc.isInvalid() && "Message to super with dependent type");
return ObjCMessageExpr::Create(
Context, Context.DependentTy, VK_RValue, LBracLoc, Receiver, Sel,
Context, Context.DependentTy, VK_PRValue, LBracLoc, Receiver, Sel,
SelectorLocs, /*Method=*/nullptr, makeArrayRef(Args, NumArgs),
RBracLoc, isImplicit);
}
Expand Down Expand Up @@ -3226,7 +3226,7 @@ ExprResult Sema::BuildInstanceMessage(Expr *Receiver,
unsigned NumArgs = ArgsIn.size();
Expr **Args = ArgsIn.data();
QualType ReturnType;
ExprValueKind VK = VK_RValue;
ExprValueKind VK = VK_PRValue;
bool ClassMessage = (ReceiverType->isObjCClassType() ||
ReceiverType->isObjCQualifiedClassType());
if (CheckMessageArgumentTypes(Receiver, ReceiverType,
Expand Down Expand Up @@ -4473,7 +4473,7 @@ Sema::CheckObjCConversion(SourceRange castRange, QualType castType,
case ACC_plusOne:
castExpr = ImplicitCastExpr::Create(Context, castExpr->getType(),
CK_ARCConsumeObject, castExpr, nullptr,
VK_RValue, FPOptionsOverride());
VK_PRValue, FPOptionsOverride());
Cleanup.setExprNeedsCleanups(true);
return ACR_okay;
}
Expand Down Expand Up @@ -4700,7 +4700,7 @@ ExprResult Sema::BuildObjCBridgedCast(SourceLocation LParenLoc,
case OBC_BridgeRetained:
// Produce the object before casting it.
SubExpr = ImplicitCastExpr::Create(Context, FromType, CK_ARCProduceObject,
SubExpr, nullptr, VK_RValue,
SubExpr, nullptr, VK_PRValue,
FPOptionsOverride());
break;

Expand Down Expand Up @@ -4740,7 +4740,7 @@ ExprResult Sema::BuildObjCBridgedCast(SourceLocation LParenLoc,
if (MustConsume) {
Cleanup.setExprNeedsCleanups(true);
Result = ImplicitCastExpr::Create(Context, T, CK_ARCConsumeObject, Result,
nullptr, VK_RValue, FPOptionsOverride());
nullptr, VK_PRValue, FPOptionsOverride());
}

return Result;
Expand Down
4 changes: 2 additions & 2 deletions clang/lib/Sema/SemaFixItUtils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -132,8 +132,8 @@ bool ConversionFixItGenerator::tryToFixConversion(const Expr *FullExpr,
if (!Expr->isLValue() || Expr->getObjectKind() != OK_Ordinary)
return false;

CanConvert = CompareTypes(S.Context.getPointerType(FromQTy), ToQTy,
S, Begin, VK_RValue);
CanConvert = CompareTypes(S.Context.getPointerType(FromQTy), ToQTy, S,
Begin, VK_PRValue);
if (CanConvert) {

if (const UnaryOperator *UO = dyn_cast<UnaryOperator>(Expr)) {
Expand Down
89 changes: 45 additions & 44 deletions clang/lib/Sema/SemaInit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ bool Sema::IsStringInit(Expr *Init, const ArrayType *AT) {
static void updateStringLiteralType(Expr *E, QualType Ty) {
while (true) {
E->setType(Ty);
E->setValueKind(VK_RValue);
E->setValueKind(VK_PRValue);
if (isa<StringLiteral>(E) || isa<ObjCEncodeExpr>(E)) {
break;
} else if (ParenExpr *PE = dyn_cast<ParenExpr>(E)) {
Expand All @@ -173,7 +173,7 @@ static void updateStringLiteralType(Expr *E, QualType Ty) {
/// as an rvalue.
static void updateGNUCompoundLiteralRValue(Expr *E) {
while (true) {
E->setValueKind(VK_RValue);
E->setValueKind(VK_PRValue);
if (isa<CompoundLiteralExpr>(E)) {
break;
} else if (ParenExpr *PE = dyn_cast<ParenExpr>(E)) {
Expand Down Expand Up @@ -2924,9 +2924,9 @@ InitListChecker::CheckDesignatedInitializer(const InitializedEntity &Entity,
Expr *Init = new (Context) IntegerLiteral(
Context, CodeUnit, PromotedCharTy, SubExpr->getExprLoc());
if (CharTy != PromotedCharTy)
Init =
ImplicitCastExpr::Create(Context, CharTy, CK_IntegralCast, Init,
nullptr, VK_RValue, FPOptionsOverride());
Init = ImplicitCastExpr::Create(Context, CharTy, CK_IntegralCast,
Init, nullptr, VK_PRValue,
FPOptionsOverride());
StructuredList->updateInit(Context, i, Init);
}
} else {
Expand All @@ -2947,9 +2947,9 @@ InitListChecker::CheckDesignatedInitializer(const InitializedEntity &Entity,
Expr *Init = new (Context) IntegerLiteral(
Context, CodeUnit, PromotedCharTy, SubExpr->getExprLoc());
if (CharTy != PromotedCharTy)
Init =
ImplicitCastExpr::Create(Context, CharTy, CK_IntegralCast, Init,
nullptr, VK_RValue, FPOptionsOverride());
Init = ImplicitCastExpr::Create(Context, CharTy, CK_IntegralCast,
Init, nullptr, VK_PRValue,
FPOptionsOverride());
StructuredList->updateInit(Context, i, Init);
}
}
Expand Down Expand Up @@ -3465,7 +3465,7 @@ void InitializationSequence::Step::Destroy() {
case SK_FinalCopy:
case SK_ExtraneousCopyToTemporary:
case SK_UserConversion:
case SK_QualificationConversionRValue:
case SK_QualificationConversionPRValue:
case SK_QualificationConversionXValue:
case SK_QualificationConversionLValue:
case SK_FunctionReferenceConversion:
Expand Down Expand Up @@ -3584,7 +3584,9 @@ void InitializationSequence::AddDerivedToBaseCastStep(QualType BaseType,
ExprValueKind VK) {
Step S;
switch (VK) {
case VK_RValue: S.Kind = SK_CastDerivedToBaseRValue; break;
case VK_PRValue:
S.Kind = SK_CastDerivedToBaseRValue;
break;
case VK_XValue: S.Kind = SK_CastDerivedToBaseXValue; break;
case VK_LValue: S.Kind = SK_CastDerivedToBaseLValue; break;
}
Expand Down Expand Up @@ -3631,10 +3633,10 @@ InitializationSequence::AddUserConversionStep(FunctionDecl *Function,
void InitializationSequence::AddQualificationConversionStep(QualType Ty,
ExprValueKind VK) {
Step S;
S.Kind = SK_QualificationConversionRValue; // work around a gcc warning
S.Kind = SK_QualificationConversionPRValue; // work around a gcc warning
switch (VK) {
case VK_RValue:
S.Kind = SK_QualificationConversionRValue;
case VK_PRValue:
S.Kind = SK_QualificationConversionPRValue;
break;
case VK_XValue:
S.Kind = SK_QualificationConversionXValue;
Expand Down Expand Up @@ -4073,10 +4075,10 @@ static void TryConstructorInitialization(Sema &S,
Entity.getKind() != InitializedEntity::EK_Delegating &&
Entity.getKind() !=
InitializedEntity::EK_LambdaToBlockConversionBlockElement &&
UnwrappedArgs.size() == 1 && UnwrappedArgs[0]->isRValue() &&
UnwrappedArgs.size() == 1 && UnwrappedArgs[0]->isPRValue() &&
S.Context.hasSameUnqualifiedType(UnwrappedArgs[0]->getType(), DestType)) {
// Convert qualifications if necessary.
Sequence.AddQualificationConversionStep(DestType, VK_RValue);
Sequence.AddQualificationConversionStep(DestType, VK_PRValue);
if (ILE)
Sequence.RewrapReferenceInitList(DestType, ILE);
return;
Expand Down Expand Up @@ -4162,7 +4164,7 @@ static void TryConstructorInitialization(Sema &S,
Sequence.AddUserConversionStep(CD, Best->FoundDecl, ConvType,
HadMultipleCandidates);
if (!S.Context.hasSameType(ConvType, DestType))
Sequence.AddQualificationConversionStep(DestType, VK_RValue);
Sequence.AddQualificationConversionStep(DestType, VK_PRValue);
if (IsListInit)
Sequence.RewrapReferenceInitList(Entity.getType(), ILE);
return;
Expand Down Expand Up @@ -4486,7 +4488,7 @@ static void TryListInitialization(Sema &S,
ImplicitConversionSequence ICS;
ICS.setStandard();
ICS.Standard.setAsIdentityConversion();
if (!E->isRValue())
if (!E->isPRValue())
ICS.Standard.First = ICK_Lvalue_To_Rvalue;
// If E is of a floating-point type, then the conversion is ill-formed
// due to narrowing, but go through the motions in order to produce the
Expand Down Expand Up @@ -4671,7 +4673,7 @@ static OverloadingResult TryRefInitWithConversionFunction(
else
cv3T3 = T1;

ExprValueKind VK = VK_RValue;
ExprValueKind VK = VK_PRValue;
if (cv3T3->isLValueReferenceType())
VK = VK_LValue;
else if (const auto *RRef = cv3T3->getAs<RValueReferenceType>())
Expand Down Expand Up @@ -4702,7 +4704,7 @@ static OverloadingResult TryRefInitWithConversionFunction(
// Every implicit conversion results in a prvalue, except for a glvalue
// derived-to-base conversion, which we handle below.
cv3T3 = ICS.Standard.getToType(2);
VK = VK_RValue;
VK = VK_PRValue;
}

// If the converted initializer is a prvalue, its type T4 is adjusted to
Expand All @@ -4714,7 +4716,7 @@ static OverloadingResult TryRefInitWithConversionFunction(
QualType cv1T4 = S.Context.getQualifiedType(cv3T3, cv1T1.getQualifiers());
if (cv1T4.getQualifiers() != cv3T3.getQualifiers())
Sequence.AddQualificationConversionStep(cv1T4, VK);
Sequence.AddReferenceBindingStep(cv1T4, VK == VK_RValue);
Sequence.AddReferenceBindingStep(cv1T4, VK == VK_PRValue);
VK = IsLValueRef ? VK_LValue : VK_XValue;

if (RefConv & Sema::ReferenceConversions::DerivedToBase)
Expand Down Expand Up @@ -4929,7 +4931,7 @@ static void TryReferenceInitializationCore(Sema &S,
(InitCategory.isPRValue() &&
(S.getLangOpts().CPlusPlus17 || T2->isRecordType() ||
T2->isArrayType())))) {
ExprValueKind ValueKind = InitCategory.isXValue() ? VK_XValue : VK_RValue;
ExprValueKind ValueKind = InitCategory.isXValue() ? VK_XValue : VK_PRValue;
if (InitCategory.isPRValue() && T2->isRecordType()) {
// The corresponding bullet in C++03 [dcl.init.ref]p5 gives the
// compiler the freedom to perform a copy here or bind to the
Expand Down Expand Up @@ -4961,7 +4963,7 @@ static void TryReferenceInitializationCore(Sema &S,
QualType cv1T4 = S.Context.getQualifiedType(cv2T2, T1QualsIgnoreAS);
if (T1QualsIgnoreAS != T2QualsIgnoreAS)
Sequence.AddQualificationConversionStep(cv1T4, ValueKind);
Sequence.AddReferenceBindingStep(cv1T4, ValueKind == VK_RValue);
Sequence.AddReferenceBindingStep(cv1T4, ValueKind == VK_PRValue);
ValueKind = isLValueRef ? VK_LValue : VK_XValue;
// Add addr space conversion if required.
if (T1Quals.getAddressSpace() != T2Quals.getAddressSpace()) {
Expand Down Expand Up @@ -5364,7 +5366,7 @@ static void TryUserDefinedConversion(Sema &S,
if (!S.getLangOpts().CPlusPlus17)
Sequence.AddFinalCopy(DestType);
else if (DestType.hasQualifiers())
Sequence.AddQualificationConversionStep(DestType, VK_RValue);
Sequence.AddQualificationConversionStep(DestType, VK_PRValue);
return;
}

Expand All @@ -5388,7 +5390,7 @@ static void TryUserDefinedConversion(Sema &S,
!S.Context.hasSameUnqualifiedType(ConvType, DestType))
Sequence.AddFinalCopy(DestType);
else if (!S.Context.hasSameType(ConvType, DestType))
Sequence.AddQualificationConversionStep(DestType, VK_RValue);
Sequence.AddQualificationConversionStep(DestType, VK_PRValue);
return;
}

Expand Down Expand Up @@ -5493,7 +5495,7 @@ static InvalidICRKind isInvalidICRSource(ASTContext &C, Expr *e,
/// Check whether the given expression is a valid operand for an
/// indirect copy/restore.
static void checkIndirectCopyRestoreSource(Sema &S, Expr *src) {
assert(src->isRValue());
assert(src->isPRValue());
bool isWeakAccess = false;
InvalidICRKind iik = isInvalidICRSource(S.Context, src, false, isWeakAccess);
// If isWeakAccess to true, there will be an implicit
Expand Down Expand Up @@ -5830,7 +5832,7 @@ void InitializationSequence::InitializeFrom(Sema &S,
Entity.getType()) &&
canPerformArrayCopy(Entity)) {
// If source is a prvalue, use it directly.
if (Initializer->getValueKind() == VK_RValue) {
if (Initializer->getValueKind() == VK_PRValue) {
AddArrayInitStep(DestType, /*IsGNUExtension*/false);
return;
}
Expand Down Expand Up @@ -7880,7 +7882,7 @@ static void CheckMoveOnConstruction(Sema &S, const Expr *InitExpr,
} else {
DiagID = diag::warn_pessimizing_move_on_initialization;
const Expr *ArgStripped = Arg->IgnoreImplicit()->IgnoreParens();
if (!ArgStripped->isRValue() || !ArgStripped->getType()->isRecordType())
if (!ArgStripped->isPRValue() || !ArgStripped->getType()->isRecordType())
return;
}

Expand Down Expand Up @@ -7950,7 +7952,7 @@ ExprResult Sema::TemporaryMaterializationConversion(Expr *E) {
// FIXME: This means that AST consumers need to deal with "prvalues" that
// denote materialized temporaries. Maybe we should add another ValueKind
// for "xvalue pretending to be a prvalue" for C++98 support.
if (!E->isRValue() || !getLangOpts().CPlusPlus11)
if (!E->isPRValue() || !getLangOpts().CPlusPlus11)
return E;

// C++1z [conv.rval]/1: T shall be a complete type.
Expand All @@ -7969,7 +7971,7 @@ ExprResult Sema::PerformQualificationConversion(Expr *E, QualType Ty,

CastKind CK = CK_NoOp;

if (VK == VK_RValue) {
if (VK == VK_PRValue) {
auto PointeeTy = Ty->getPointeeType();
auto ExprPointeeTy = E->getType()->getPointeeType();
if (!PointeeTy.isNull() &&
Expand Down Expand Up @@ -8114,7 +8116,7 @@ ExprResult InitializationSequence::Perform(Sema &S,
case SK_UserConversion:
case SK_QualificationConversionLValue:
case SK_QualificationConversionXValue:
case SK_QualificationConversionRValue:
case SK_QualificationConversionPRValue:
case SK_FunctionReferenceConversion:
case SK_AtomicConversion:
case SK_ConversionSequence:
Expand Down Expand Up @@ -8205,11 +8207,10 @@ ExprResult InitializationSequence::Perform(Sema &S,
return ExprError();

ExprValueKind VK =
Step->Kind == SK_CastDerivedToBaseLValue ?
VK_LValue :
(Step->Kind == SK_CastDerivedToBaseXValue ?
VK_XValue :
VK_RValue);
Step->Kind == SK_CastDerivedToBaseLValue
? VK_LValue
: (Step->Kind == SK_CastDerivedToBaseXValue ? VK_XValue
: VK_PRValue);
CurInit = ImplicitCastExpr::Create(S.Context, Step->Type,
CK_DerivedToBase, CurInit.get(),
&BasePath, VK, FPOptionsOverride());
Expand Down Expand Up @@ -8241,7 +8242,7 @@ ExprResult InitializationSequence::Perform(Sema &S,

case SK_BindReferenceToTemporary: {
// Make sure the "temporary" is actually an rvalue.
assert(CurInit.get()->isRValue() && "not a temporary");
assert(CurInit.get()->isPRValue() && "not a temporary");

// Check exception specifications
if (S.CheckExceptionSpecCompatibility(CurInit.get(), DestType))
Expand Down Expand Up @@ -8382,13 +8383,13 @@ ExprResult InitializationSequence::Perform(Sema &S,

case SK_QualificationConversionLValue:
case SK_QualificationConversionXValue:
case SK_QualificationConversionRValue: {
case SK_QualificationConversionPRValue: {
// Perform a qualification conversion; these can never go wrong.
ExprValueKind VK =
Step->Kind == SK_QualificationConversionLValue
? VK_LValue
: (Step->Kind == SK_QualificationConversionXValue ? VK_XValue
: VK_RValue);
: VK_PRValue);
CurInit = S.PerformQualificationConversion(CurInit.get(), Step->Type, VK);
break;
}
Expand All @@ -8401,9 +8402,9 @@ ExprResult InitializationSequence::Perform(Sema &S,
break;

case SK_AtomicConversion: {
assert(CurInit.get()->isRValue() && "cannot convert glvalue to atomic");
assert(CurInit.get()->isPRValue() && "cannot convert glvalue to atomic");
CurInit = S.ImpCastExprToType(CurInit.get(), Step->Type,
CK_NonAtomicToAtomic, VK_RValue);
CK_NonAtomicToAtomic, VK_PRValue);
break;
}

Expand Down Expand Up @@ -8706,7 +8707,7 @@ ExprResult InitializationSequence::Perform(Sema &S,
case SK_ProduceObjCObject:
CurInit = ImplicitCastExpr::Create(
S.Context, Step->Type, CK_ARCProduceObject, CurInit.get(), nullptr,
VK_RValue, FPOptionsOverride());
VK_PRValue, FPOptionsOverride());
break;

case SK_StdInitializerList: {
Expand Down Expand Up @@ -8762,7 +8763,7 @@ ExprResult InitializationSequence::Perform(Sema &S,
if (!Var->hasGlobalStorage()) {
CurInit = ImplicitCastExpr::Create(
S.Context, Step->Type, CK_LValueToRValue, Init,
/*BasePath=*/nullptr, VK_RValue, FPOptionsOverride());
/*BasePath=*/nullptr, VK_PRValue, FPOptionsOverride());
break;
}
// Case 1a
Expand Down Expand Up @@ -9648,8 +9649,8 @@ void InitializationSequence::dump(raw_ostream &OS) const {
OS << "user-defined conversion via " << *S->Function.Function;
break;

case SK_QualificationConversionRValue:
OS << "qualification conversion (rvalue)";
case SK_QualificationConversionPRValue:
OS << "qualification conversion (prvalue)";
break;

case SK_QualificationConversionXValue:
Expand Down
2 changes: 1 addition & 1 deletion clang/lib/Sema/SemaLambda.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -686,7 +686,7 @@ static void adjustBlockReturnsToEnum(Sema &S, ArrayRef<ReturnStmt*> returns,

Expr *E = (cleanups ? cleanups->getSubExpr() : retValue);
E = ImplicitCastExpr::Create(S.Context, returnType, CK_IntegralCast, E,
/*base path*/ nullptr, VK_RValue,
/*base path*/ nullptr, VK_PRValue,
FPOptionsOverride());
if (cleanups) {
cleanups->setSubExpr(E);
Expand Down
8 changes: 4 additions & 4 deletions clang/lib/Sema/SemaLookup.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3159,7 +3159,7 @@ Sema::SpecialMemberOverloadResult Sema::LookupSpecialMember(CXXRecordDecl *RD,
ArgType.addVolatile();

// This isn't /really/ specified by the standard, but it's implied
// we should be working from an RValue in the case of move to ensure
// we should be working from a PRValue in the case of move to ensure
// that we prefer to bind to rvalue references, and an LValue in the
// case of copy to ensure we don't bind to rvalue references.
// Possibly an XValue is actually correct in the case of move, but
Expand All @@ -3168,7 +3168,7 @@ Sema::SpecialMemberOverloadResult Sema::LookupSpecialMember(CXXRecordDecl *RD,
if (SM == CXXCopyConstructor || SM == CXXCopyAssignment)
VK = VK_LValue;
else
VK = VK_RValue;
VK = VK_PRValue;
}

OpaqueValueExpr FakeArg(LookupLoc, ArgType, VK);
Expand All @@ -3185,8 +3185,8 @@ Sema::SpecialMemberOverloadResult Sema::LookupSpecialMember(CXXRecordDecl *RD,
if (VolatileThis)
ThisTy.addVolatile();
Expr::Classification Classification =
OpaqueValueExpr(LookupLoc, ThisTy,
RValueThis ? VK_RValue : VK_LValue).Classify(Context);
OpaqueValueExpr(LookupLoc, ThisTy, RValueThis ? VK_PRValue : VK_LValue)
.Classify(Context);

// Now we perform lookup on the name we computed earlier and do overload
// resolution. Lookup is only performed directly into the class since there
Expand Down
4 changes: 2 additions & 2 deletions clang/lib/Sema/SemaObjCProperty.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1458,7 +1458,7 @@ Decl *Sema::ActOnPropertyImplDecl(Scope *S,
MarkDeclRefReferenced(SelfExpr);
Expr *LoadSelfExpr = ImplicitCastExpr::Create(
Context, SelfDecl->getType(), CK_LValueToRValue, SelfExpr, nullptr,
VK_RValue, FPOptionsOverride());
VK_PRValue, FPOptionsOverride());
Expr *IvarRefExpr =
new (Context) ObjCIvarRefExpr(Ivar,
Ivar->getUsageType(SelfDecl->getType()),
Expand Down Expand Up @@ -1521,7 +1521,7 @@ Decl *Sema::ActOnPropertyImplDecl(Scope *S,
MarkDeclRefReferenced(SelfExpr);
Expr *LoadSelfExpr = ImplicitCastExpr::Create(
Context, SelfDecl->getType(), CK_LValueToRValue, SelfExpr, nullptr,
VK_RValue, FPOptionsOverride());
VK_PRValue, FPOptionsOverride());
Expr *lhs =
new (Context) ObjCIvarRefExpr(Ivar,
Ivar->getUsageType(SelfDecl->getType()),
Expand Down
18 changes: 10 additions & 8 deletions clang/lib/Sema/SemaOpenMP.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6714,7 +6714,8 @@ void Sema::ActOnFinishedFunctionDefinitionInOpenMPDeclareVariantScope(
auto *VariantFuncRef = DeclRefExpr::Create(
Context, NestedNameSpecifierLoc(), SourceLocation(), FD,
/* RefersToEnclosingVariableOrCapture */ false,
/* NameLoc */ FD->getLocation(), FD->getType(), ExprValueKind::VK_RValue);
/* NameLoc */ FD->getLocation(), FD->getType(),
ExprValueKind::VK_PRValue);

OMPDeclareVariantScope &DVScope = OMPDeclareVariantScopes.back();
auto *OMPDeclareVariantA = OMPDeclareVariantAttr::CreateImplicit(
Expand Down Expand Up @@ -10612,9 +10613,9 @@ bool OpenMPAtomicUpdateChecker::checkStatement(Stmt *S, unsigned DiagId,
// OpaqueValueExpr(expr)' or 'OpaqueValueExpr(expr) binop
// OpaqueValueExpr(x)' and then cast it to the type of the 'x' expression.
auto *OVEX = new (SemaRef.getASTContext())
OpaqueValueExpr(X->getExprLoc(), X->getType(), VK_RValue);
OpaqueValueExpr(X->getExprLoc(), X->getType(), VK_PRValue);
auto *OVEExpr = new (SemaRef.getASTContext())
OpaqueValueExpr(E->getExprLoc(), E->getType(), VK_RValue);
OpaqueValueExpr(E->getExprLoc(), E->getType(), VK_PRValue);
ExprResult Update =
SemaRef.CreateBuiltinBinOp(OpLoc, Op, IsXLHSInRHSPart ? OVEX : OVEExpr,
IsXLHSInRHSPart ? OVEExpr : OVEX);
Expand Down Expand Up @@ -16685,7 +16686,8 @@ static bool actOnOMPReductionKindClause(
// (type of the variable or single array element).
PrivateTy = Context.getVariableArrayType(
Type,
new (Context) OpaqueValueExpr(ELoc, Context.getSizeType(), VK_RValue),
new (Context)
OpaqueValueExpr(ELoc, Context.getSizeType(), VK_PRValue),
ArrayType::Normal, /*IndexTypeQuals=*/0, SourceRange());
} else if (!ASE && !OASE &&
Context.getAsArrayType(D->getType().getNonReferenceType())) {
Expand Down Expand Up @@ -16857,11 +16859,11 @@ static bool actOnOMPReductionKindClause(
QualType Params[] = {PtrRedTy, PtrRedTy};
QualType FnTy = Context.getFunctionType(Context.VoidTy, Params, EPI);
auto *OVE = new (Context) OpaqueValueExpr(
ELoc, Context.getPointerType(FnTy), VK_RValue, OK_Ordinary,
ELoc, Context.getPointerType(FnTy), VK_PRValue, OK_Ordinary,
S.DefaultLvalueConversion(DeclareReductionRef.get()).get());
Expr *Args[] = {LHS.get(), RHS.get()};
ReductionOp =
CallExpr::Create(Context, OVE, Args, Context.VoidTy, VK_RValue, ELoc,
CallExpr::Create(Context, OVE, Args, Context.VoidTy, VK_PRValue, ELoc,
S.CurFPFeatureOverrides());
} else {
BinaryOperatorKind CombBOK = getRelatedCompoundReductionOp(BOK);
Expand Down Expand Up @@ -16925,7 +16927,7 @@ static bool actOnOMPReductionKindClause(
} else {
// Build temp array for prefix sum.
auto *Dim = new (S.Context)
OpaqueValueExpr(ELoc, S.Context.getSizeType(), VK_RValue);
OpaqueValueExpr(ELoc, S.Context.getSizeType(), VK_PRValue);
QualType ArrayTy =
S.Context.getVariableArrayType(PrivateTy, Dim, ArrayType::Normal,
/*IndexTypeQuals=*/0, {ELoc, ELoc});
Expand All @@ -16938,7 +16940,7 @@ static bool actOnOMPReductionKindClause(
TempArrayElem =
S.DefaultFunctionArrayLvalueConversion(TempArrayRes.get());
auto *Idx = new (S.Context)
OpaqueValueExpr(ELoc, S.Context.getSizeType(), VK_RValue);
OpaqueValueExpr(ELoc, S.Context.getSizeType(), VK_PRValue);
TempArrayElem = S.CreateBuiltinArraySubscriptExpr(TempArrayElem.get(),
ELoc, Idx, ELoc);
}
Expand Down
38 changes: 19 additions & 19 deletions clang/lib/Sema/SemaOverload.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5434,8 +5434,8 @@ Sema::PerformObjectArgumentInitialization(Expr *From,
DestType = ImplicitParamRecordType;
FromClassification = From->Classify(Context);

// When performing member access on an rvalue, materialize a temporary.
if (From->isRValue()) {
// When performing member access on a prvalue, materialize a temporary.
if (From->isPRValue()) {
From = CreateMaterializeTemporaryExpr(FromRecordType, From,
Method->getRefQualifier() !=
RefQualifierKind::RQ_RValue);
Expand Down Expand Up @@ -7371,7 +7371,7 @@ void Sema::AddConversionCandidate(
ImplicitCastExpr ConversionFn(ImplicitCastExpr::OnStack,
Context.getPointerType(Conversion->getType()),
CK_FunctionToPointerDecay, &ConversionRef,
VK_RValue, FPOptionsOverride());
VK_PRValue, FPOptionsOverride());

QualType ConversionType = Conversion->getConversionType();
if (!isCompleteType(From->getBeginLoc(), ConversionType)) {
Expand Down Expand Up @@ -12983,7 +12983,7 @@ bool Sema::buildOverloadedCallSet(Scope *S, Expr *Fn,
// lookup to instantiation time to be able to search into type dependent
// base classes.
CallExpr *CE =
CallExpr::Create(Context, Fn, Args, Context.DependentTy, VK_RValue,
CallExpr::Create(Context, Fn, Args, Context.DependentTy, VK_PRValue,
RParenLoc, CurFPFeatureOverrides());
CE->markDependentForPostponedNameLookup();
*Result = CE;
Expand Down Expand Up @@ -13241,7 +13241,7 @@ Sema::CreateOverloadedUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc,
if (Input->isTypeDependent()) {
if (Fns.empty())
return UnaryOperator::Create(Context, Input, Opc, Context.DependentTy,
VK_RValue, OK_Ordinary, OpLoc, false,
VK_PRValue, OK_Ordinary, OpLoc, false,
CurFPFeatureOverrides());

CXXRecordDecl *NamingClass = nullptr; // lookup ignores member operators
Expand All @@ -13250,7 +13250,7 @@ Sema::CreateOverloadedUnaryOp(SourceLocation OpLoc, UnaryOperatorKind Opc,
if (Fn.isInvalid())
return ExprError();
return CXXOperatorCallExpr::Create(Context, Op, Fn.get(), ArgsArray,
Context.DependentTy, VK_RValue, OpLoc,
Context.DependentTy, VK_PRValue, OpLoc,
CurFPFeatureOverrides());
}

Expand Down Expand Up @@ -13498,9 +13498,9 @@ ExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc,
Context, Args[0], Args[1], Opc, Context.DependentTy, VK_LValue,
OK_Ordinary, OpLoc, CurFPFeatureOverrides(), Context.DependentTy,
Context.DependentTy);
return BinaryOperator::Create(Context, Args[0], Args[1], Opc,
Context.DependentTy, VK_RValue, OK_Ordinary,
OpLoc, CurFPFeatureOverrides());
return BinaryOperator::Create(
Context, Args[0], Args[1], Opc, Context.DependentTy, VK_PRValue,
OK_Ordinary, OpLoc, CurFPFeatureOverrides());
}

// FIXME: save results of ADL from here?
Expand All @@ -13513,7 +13513,7 @@ ExprResult Sema::CreateOverloadedBinOp(SourceLocation OpLoc,
if (Fn.isInvalid())
return ExprError();
return CXXOperatorCallExpr::Create(Context, Op, Fn.get(), Args,
Context.DependentTy, VK_RValue, OpLoc,
Context.DependentTy, VK_PRValue, OpLoc,
CurFPFeatureOverrides());
}

Expand Down Expand Up @@ -13992,7 +13992,7 @@ Sema::CreateOverloadedArraySubscriptExpr(SourceLocation LLoc,
// Can't add any actual overloads yet

return CXXOperatorCallExpr::Create(Context, OO_Subscript, Fn.get(), Args,
Context.DependentTy, VK_RValue, RLoc,
Context.DependentTy, VK_PRValue, RLoc,
CurFPFeatureOverrides());
}

Expand Down Expand Up @@ -14215,7 +14215,7 @@ ExprResult Sema::BuildCallToMemberFunction(Scope *S, Expr *MemExprE,
Type);
};
if (isa<CXXPseudoDestructorExpr>(NakedMemExpr))
return CallExpr::Create(Context, MemExprE, Args, Context.VoidTy, VK_RValue,
return CallExpr::Create(Context, MemExprE, Args, Context.VoidTy, VK_PRValue,
RParenLoc, CurFPFeatureOverrides());

UnbridgedCastsSet UnbridgedCasts;
Expand Down Expand Up @@ -14600,7 +14600,7 @@ Sema::BuildCallToObjectOfClassType(Scope *S, Expr *Obj,
// Record usage of conversion in an implicit cast.
Call = ImplicitCastExpr::Create(
Context, Call.get()->getType(), CK_UserDefinedConversion, Call.get(),
nullptr, VK_RValue, CurFPFeatureOverrides());
nullptr, VK_PRValue, CurFPFeatureOverrides());

return BuildCallExpr(S, Call.get(), LParenLoc, Args, RParenLoc);
}
Expand Down Expand Up @@ -15068,7 +15068,7 @@ Expr *Sema::FixOverloadedFunctionReference(Expr *E, DeclAccessPair Found,
(void)isCompleteType(UnOp->getOperatorLoc(), MemPtrType);

return UnaryOperator::Create(
Context, SubExpr, UO_AddrOf, MemPtrType, VK_RValue, OK_Ordinary,
Context, SubExpr, UO_AddrOf, MemPtrType, VK_PRValue, OK_Ordinary,
UnOp->getOperatorLoc(), false, CurFPFeatureOverrides());
}
}
Expand All @@ -15077,10 +15077,10 @@ Expr *Sema::FixOverloadedFunctionReference(Expr *E, DeclAccessPair Found,
if (SubExpr == UnOp->getSubExpr())
return UnOp;

return UnaryOperator::Create(Context, SubExpr, UO_AddrOf,
Context.getPointerType(SubExpr->getType()),
VK_RValue, OK_Ordinary, UnOp->getOperatorLoc(),
false, CurFPFeatureOverrides());
return UnaryOperator::Create(
Context, SubExpr, UO_AddrOf, Context.getPointerType(SubExpr->getType()),
VK_PRValue, OK_Ordinary, UnOp->getOperatorLoc(), false,
CurFPFeatureOverrides());
}

if (UnresolvedLookupExpr *ULE = dyn_cast<UnresolvedLookupExpr>(E)) {
Expand Down Expand Up @@ -15135,7 +15135,7 @@ Expr *Sema::FixOverloadedFunctionReference(Expr *E, DeclAccessPair Found,
valueKind = VK_LValue;
type = Fn->getType();
} else {
valueKind = VK_RValue;
valueKind = VK_PRValue;
type = Context.BoundMemberTy;
}

Expand Down
6 changes: 3 additions & 3 deletions clang/lib/Sema/SemaPseudoObject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -835,7 +835,7 @@ ExprResult ObjCPropertyOpBuilder::buildRValueOperation(Expr *op) {

// As a special case, if the method returns 'id', try to get
// a better type from the property.
if (RefExpr->isExplicitProperty() && result.get()->isRValue()) {
if (RefExpr->isExplicitProperty() && result.get()->isPRValue()) {
QualType receiverType = RefExpr->getReceiverType(S.Context);
QualType propType = RefExpr->getExplicitProperty()
->getUsageType(receiverType);
Expand Down Expand Up @@ -1554,7 +1554,7 @@ ExprResult Sema::checkPseudoObjectIncDec(Scope *Sc, SourceLocation opcLoc,
// Do nothing if the operand is dependent.
if (op->isTypeDependent())
return UnaryOperator::Create(Context, op, opcode, Context.DependentTy,
VK_RValue, OK_Ordinary, opcLoc, false,
VK_PRValue, OK_Ordinary, opcLoc, false,
CurFPFeatureOverrides());

assert(UnaryOperator::isIncrementDecrementOp(opcode));
Expand Down Expand Up @@ -1585,7 +1585,7 @@ ExprResult Sema::checkPseudoObjectAssignment(Scope *S, SourceLocation opcLoc,
// Do nothing if either argument is dependent.
if (LHS->isTypeDependent() || RHS->isTypeDependent())
return BinaryOperator::Create(Context, LHS, RHS, opcode,
Context.DependentTy, VK_RValue, OK_Ordinary,
Context.DependentTy, VK_PRValue, OK_Ordinary,
opcLoc, CurFPFeatureOverrides());

// Filter out non-overload placeholder types in the RHS.
Expand Down
4 changes: 2 additions & 2 deletions clang/lib/Sema/SemaStmt.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -867,7 +867,7 @@ StmtResult Sema::ActOnIfStmt(SourceLocation IfLoc, bool IsConstexpr,
Cond = ConditionResult(
*this, nullptr,
MakeFullExpr(new (Context) OpaqueValueExpr(SourceLocation(),
Context.BoolTy, VK_RValue),
Context.BoolTy, VK_PRValue),
IfLoc),
false);

Expand Down Expand Up @@ -2271,7 +2271,7 @@ Sema::ActOnObjCForCollectionStmt(SourceLocation ForLoc,
// If the type contained 'auto', deduce the 'auto' to 'id'.
if (FirstType->getContainedAutoType()) {
OpaqueValueExpr OpaqueId(D->getLocation(), Context.getObjCIdType(),
VK_RValue);
VK_PRValue);
Expr *DeducedInit = &OpaqueId;
if (DeduceAutoType(D->getTypeSourceInfo(), DeducedInit, FirstType) ==
DAR_Failed)
Expand Down
2 changes: 1 addition & 1 deletion clang/lib/Sema/SemaStmtAsm.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -735,7 +735,7 @@ void Sema::FillInlineAsmIdentifierInfo(Expr *Res,
Expr::EvalResult Eval;
if (T->isFunctionType() || T->isDependentType())
return Info.setLabel(Res);
if (Res->isRValue()) {
if (Res->isPRValue()) {
bool IsEnum = isa<clang::EnumType>(T);
if (DeclRefExpr *DRE = dyn_cast<clang::DeclRefExpr>(Res))
if (DRE->getDecl()->getKind() == Decl::EnumConstant)
Expand Down
17 changes: 9 additions & 8 deletions clang/lib/Sema/SemaTemplate.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1256,8 +1256,8 @@ bool Sema::AttachTypeConstraint(AutoTypeLoc TL, NonTypeTemplateParmDecl *NTTP,
}
// FIXME: Concepts: This should be the type of the placeholder, but this is
// unclear in the wording right now.
DeclRefExpr *Ref = BuildDeclRefExpr(NTTP, NTTP->getType(), VK_RValue,
NTTP->getLocation());
DeclRefExpr *Ref =
BuildDeclRefExpr(NTTP, NTTP->getType(), VK_PRValue, NTTP->getLocation());
if (!Ref)
return true;
ExprResult ImmediatelyDeclaredConstraint =
Expand Down Expand Up @@ -2405,9 +2405,9 @@ struct ConvertConstructorToDeductionGuideTransform {
NewDefArg = new (SemaRef.Context)
OpaqueValueExpr(OldParam->getDefaultArg()->getBeginLoc(),
ParamTy.getNonLValueExprType(SemaRef.Context),
ParamTy->isLValueReferenceType() ? VK_LValue :
ParamTy->isRValueReferenceType() ? VK_XValue :
VK_RValue);
ParamTy->isLValueReferenceType() ? VK_LValue
: ParamTy->isRValueReferenceType() ? VK_XValue
: VK_PRValue);
}

ParmVarDecl *NewParam = ParmVarDecl::Create(SemaRef.Context, DC,
Expand Down Expand Up @@ -6903,8 +6903,9 @@ ExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param,
Arg = PE->getPattern();
ExprResult E = ImpCastExprToType(
Arg, ParamType.getNonLValueExprType(Context), CK_Dependent,
ParamType->isLValueReferenceType() ? VK_LValue :
ParamType->isRValueReferenceType() ? VK_XValue : VK_RValue);
ParamType->isLValueReferenceType() ? VK_LValue
: ParamType->isRValueReferenceType() ? VK_XValue
: VK_PRValue);
if (E.isInvalid())
return ExprError();
if (PE) {
Expand Down Expand Up @@ -7632,7 +7633,7 @@ Sema::BuildExpressionFromIntegralTemplateArgument(const TemplateArgument &Arg,
if (OrigT->isEnumeralType()) {
// FIXME: This is a hack. We need a better way to handle substituted
// non-type template parameters.
E = CStyleCastExpr::Create(Context, OrigT, VK_RValue, CK_IntegralCast, E,
E = CStyleCastExpr::Create(Context, OrigT, VK_PRValue, CK_IntegralCast, E,
nullptr, CurFPFeatureOverrides(),
Context.getTrivialTypeSourceInfo(OrigT, Loc),
Loc, Loc);
Expand Down
4 changes: 2 additions & 2 deletions clang/lib/Sema/SemaTemplateInstantiate.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1475,8 +1475,8 @@ TemplateInstantiator::TransformTemplateParmRefExpr(DeclRefExpr *E,
ExprType.addConst();

return new (SemaRef.Context) SubstNonTypeTemplateParmPackExpr(
ExprType, TargetType->isReferenceType() ? VK_LValue : VK_RValue, NTTP,
E->getLocation(), Arg);
ExprType, TargetType->isReferenceType() ? VK_LValue : VK_PRValue,
NTTP, E->getLocation(), Arg);
}

Arg = getPackSubstitutedTemplateArgument(getSema(), Arg);
Expand Down
2 changes: 1 addition & 1 deletion clang/lib/Sema/SemaTemplateInstantiateDecl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -474,7 +474,7 @@ static void instantiateOMPDeclareVariantAttr(
SourceLocation(), SubstFD,
/* RefersToEnclosingVariableOrCapture */ false,
/* NameLoc */ SubstFD->getLocation(),
SubstFD->getType(), ExprValueKind::VK_RValue);
SubstFD->getType(), ExprValueKind::VK_PRValue);
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions clang/lib/Sema/SemaType.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2397,7 +2397,7 @@ QualType Sema::BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM,
}

// Do lvalue-to-rvalue conversions on the array size expression.
if (ArraySize && !ArraySize->isRValue()) {
if (ArraySize && !ArraySize->isPRValue()) {
ExprResult Result = DefaultLvalueConversion(ArraySize);
if (Result.isInvalid())
return QualType();
Expand Down Expand Up @@ -8886,7 +8886,7 @@ QualType Sema::getDecltypeForParenthesizedExpr(Expr *E) {
case VK_LValue:
return Context.getLValueReferenceType(T);
// - otherwise, decltype(e) is the type of e.
case VK_RValue:
case VK_PRValue:
return T;
}
llvm_unreachable("Unknown value kind");
Expand Down
4 changes: 2 additions & 2 deletions clang/lib/Sema/TreeTransform.h
Original file line number Diff line number Diff line change
Expand Up @@ -3599,7 +3599,7 @@ class TreeTransform {
FunctionDecl *Builtin = cast<FunctionDecl>(Lookup.front());
Expr *Callee = new (SemaRef.Context)
DeclRefExpr(SemaRef.Context, Builtin, false,
SemaRef.Context.BuiltinFnTy, VK_RValue, BuiltinLoc);
SemaRef.Context.BuiltinFnTy, VK_PRValue, BuiltinLoc);
QualType CalleePtrTy = SemaRef.Context.getPointerType(Builtin->getType());
Callee = SemaRef.ImpCastExprToType(Callee, CalleePtrTy,
CK_BuiltinFnToFnPtr).get();
Expand Down Expand Up @@ -13282,7 +13282,7 @@ TreeTransform<Derived>::TransformSizeOfPackExpr(SizeOfPackExpr *E) {
auto *VD = cast<ValueDecl>(Pack);
ExprResult DRE = getSema().BuildDeclRefExpr(
VD, VD->getType().getNonLValueExprType(getSema().Context),
VD->getType()->isReferenceType() ? VK_LValue : VK_RValue,
VD->getType()->isReferenceType() ? VK_LValue : VK_PRValue,
E->getPackLoc());
if (DRE.isInvalid())
return ExprError();
Expand Down
2 changes: 1 addition & 1 deletion clang/lib/StaticAnalyzer/Checkers/MoveChecker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -472,7 +472,7 @@ void MoveChecker::checkPostCall(const CallEvent &Call,
const MemRegion *BaseRegion = ArgRegion->getBaseRegion();
// Skip temp objects because of their short lifetime.
if (BaseRegion->getAs<CXXTempObjectRegion>() ||
AFC->getArgExpr(0)->isRValue())
AFC->getArgExpr(0)->isPRValue())
return;
// If it has already been reported do not need to modify the state.

Expand Down
4 changes: 2 additions & 2 deletions clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2013,7 +2013,7 @@ static void trackRValueExpression(const ExplodedNode *InputNode, const Expr *E,
PathSensitiveBugReport &report,
bugreporter::TrackingKind TKind,
bool EnableNullFPSuppression) {
assert(E->isRValue() && "The expression is not an rvalue!");
assert(E->isPRValue() && "The expression is not a prvalue!");
const ExplodedNode *RVNode = findNodeForExpression(InputNode, E);
if (!RVNode)
return;
Expand Down Expand Up @@ -2187,7 +2187,7 @@ bool bugreporter::trackExpressionValue(const ExplodedNode *InputNode,
}
}

if (Inner->isRValue())
if (Inner->isPRValue())
trackRValueExpression(LVNode, Inner, report, TKind,
EnableNullFPSuppression);

Expand Down
2 changes: 1 addition & 1 deletion clang/lib/StaticAnalyzer/Core/CallEvent.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ QualType CallEvent::getResultType() const {
case VK_XValue:
ResultTy = Ctx.getRValueReferenceType(ResultTy);
break;
case VK_RValue:
case VK_PRValue:
// No adjustment is necessary.
break;
}
Expand Down
25 changes: 8 additions & 17 deletions clang/test/AST/ast-dump-decl-json.c
Original file line number Diff line number Diff line change
Expand Up @@ -903,7 +903,6 @@ void testParmVarDecl(int TestParmVarDecl);
// CHECK-NEXT: }
// CHECK-NEXT: }


// CHECK: "kind": "EnumConstantDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "offset": 835,
Expand Down Expand Up @@ -947,7 +946,7 @@ void testParmVarDecl(int TestParmVarDecl);
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "value": "1",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand All @@ -968,15 +967,14 @@ void testParmVarDecl(int TestParmVarDecl);
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "value": "1"
// CHECK-NEXT: }
// CHECK-NEXT: ]
// CHECK-NEXT: }
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "RecordDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "offset": 875,
Expand Down Expand Up @@ -1108,7 +1106,6 @@ void testParmVarDecl(int TestParmVarDecl);
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "FunctionDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "offset": 1003,
Expand Down Expand Up @@ -1243,7 +1240,7 @@ void testParmVarDecl(int TestParmVarDecl);
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "LValueToRValue",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand Down Expand Up @@ -1283,7 +1280,6 @@ void testParmVarDecl(int TestParmVarDecl);
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "FunctionDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "offset": 1113,
Expand Down Expand Up @@ -1388,7 +1384,7 @@ void testParmVarDecl(int TestParmVarDecl);
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "IntegralCast",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand All @@ -1410,7 +1406,7 @@ void testParmVarDecl(int TestParmVarDecl);
// CHECK-NEXT: "desugaredQualType": "enum Enum",
// CHECK-NEXT: "qualType": "enum Enum"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "LValueToRValue",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand Down Expand Up @@ -1454,7 +1450,6 @@ void testParmVarDecl(int TestParmVarDecl);
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "FunctionDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "offset": 1168,
Expand Down Expand Up @@ -1623,7 +1618,6 @@ void testParmVarDecl(int TestParmVarDecl);
// CHECK-NEXT: }
// CHECK-NEXT: }


// CHECK: "kind": "FieldDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "offset": 1351,
Expand Down Expand Up @@ -1668,7 +1662,7 @@ void testParmVarDecl(int TestParmVarDecl);
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "value": "1",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand All @@ -1689,15 +1683,14 @@ void testParmVarDecl(int TestParmVarDecl);
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "value": "1"
// CHECK-NEXT: }
// CHECK-NEXT: ]
// CHECK-NEXT: }
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "VarDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "offset": 1383,
Expand Down Expand Up @@ -1783,7 +1776,6 @@ void testParmVarDecl(int TestParmVarDecl);
// CHECK-NEXT: "tls": "static"
// CHECK-NEXT: }


// CHECK: "kind": "VarDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "offset": 1458,
Expand Down Expand Up @@ -1829,13 +1821,12 @@ void testParmVarDecl(int TestParmVarDecl);
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "value": "0"
// CHECK-NEXT: }
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "ParmVarDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "offset": 1505,
Expand Down
12 changes: 4 additions & 8 deletions clang/test/AST/ast-dump-decl-json.m
Original file line number Diff line number Diff line change
Expand Up @@ -349,7 +349,6 @@ void f() {
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "ObjCMethodDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "offset": 490,
Expand Down Expand Up @@ -490,7 +489,7 @@ void f() {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "value": "0"
// CHECK-NEXT: }
// CHECK-NEXT: ]
Expand All @@ -500,7 +499,6 @@ void f() {
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "ObjCProtocolDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "offset": 562,
Expand Down Expand Up @@ -1676,7 +1674,6 @@ void f() {
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "FunctionDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "offset": 1184,
Expand Down Expand Up @@ -1768,7 +1765,7 @@ void f() {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "void (^)(int, ...)"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "cleanupsHaveSideEffects": true,
// CHECK-NEXT: "cleanups": [
// CHECK-NEXT: {
Expand All @@ -1795,7 +1792,7 @@ void f() {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "void (^)(int, ...)"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
// CHECK-NEXT: "id": "0x{{.*}}",
Expand Down Expand Up @@ -1890,7 +1887,7 @@ void f() {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "LValueToRValue",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand Down Expand Up @@ -1962,7 +1959,6 @@ void f() {
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "VarDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "offset": 1296,
Expand Down
1,382 changes: 691 additions & 691 deletions clang/test/AST/ast-dump-expr-json.c

Large diffs are not rendered by default.

288 changes: 139 additions & 149 deletions clang/test/AST/ast-dump-expr-json.cpp

Large diffs are not rendered by default.

293 changes: 142 additions & 151 deletions clang/test/AST/ast-dump-expr-json.m

Large diffs are not rendered by default.

12 changes: 3 additions & 9 deletions clang/test/AST/ast-dump-funcs-json.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,6 @@ int main() {
// CHECK-NEXT: }
// CHECK-NEXT: }


// CHECK: "kind": "CXXMethodDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "offset": 232,
Expand Down Expand Up @@ -278,15 +277,14 @@ int main() {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "value": "12"
// CHECK-NEXT: }
// CHECK-NEXT: ]
// CHECK-NEXT: }
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "CXXMethodDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "offset": 271,
Expand Down Expand Up @@ -316,7 +314,6 @@ int main() {
// CHECK-NEXT: "pure": true
// CHECK-NEXT: }


// CHECK: "kind": "CXXMethodDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "offset": 343,
Expand Down Expand Up @@ -410,7 +407,7 @@ int main() {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "value": "100"
// CHECK-NEXT: }
// CHECK-NEXT: ]
Expand All @@ -434,7 +431,6 @@ int main() {
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "CXXMethodDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "offset": 399,
Expand Down Expand Up @@ -649,7 +645,6 @@ int main() {
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "FunctionDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "offset": 504,
Expand Down Expand Up @@ -747,15 +742,14 @@ int main() {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "value": "12"
// CHECK-NEXT: }
// CHECK-NEXT: ]
// CHECK-NEXT: }
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "FunctionDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "offset": 545,
Expand Down
42 changes: 18 additions & 24 deletions clang/test/AST/ast-dump-if-json.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ void func(int val) {
// NOTE: CHECK lines have been autogenerated by gen_ast_dump_json_test.py
// using --filters=IfStmt


// CHECK: "kind": "IfStmt",
// CHECK-NEXT: "range": {
// CHECK-NEXT: "begin": {
Expand Down Expand Up @@ -65,7 +64,7 @@ void func(int val) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "bool"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "IntegralToBoolean",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand All @@ -86,7 +85,7 @@ void func(int val) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "LValueToRValue",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand Down Expand Up @@ -141,7 +140,6 @@ void func(int val) {
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "IfStmt",
// CHECK-NEXT: "range": {
// CHECK-NEXT: "begin": {
Expand Down Expand Up @@ -178,7 +176,7 @@ void func(int val) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "bool"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "IntegralToBoolean",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand All @@ -199,7 +197,7 @@ void func(int val) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "LValueToRValue",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand Down Expand Up @@ -271,7 +269,6 @@ void func(int val) {
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "IfStmt",
// CHECK-NEXT: "range": {
// CHECK-NEXT: "begin": {
Expand Down Expand Up @@ -308,7 +305,7 @@ void func(int val) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "bool"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "IntegralToBoolean",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand All @@ -329,7 +326,7 @@ void func(int val) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "LValueToRValue",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand Down Expand Up @@ -419,7 +416,7 @@ void func(int val) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "bool"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "IntegralToBoolean",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand All @@ -440,7 +437,7 @@ void func(int val) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "LValueToRValue",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand Down Expand Up @@ -514,7 +511,6 @@ void func(int val) {
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "IfStmt",
// CHECK-NEXT: "range": {
// CHECK-NEXT: "begin": {
Expand Down Expand Up @@ -551,7 +547,7 @@ void func(int val) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "bool"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "value": "true",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand All @@ -572,7 +568,7 @@ void func(int val) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "bool"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "opcode": "==",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand All @@ -593,7 +589,7 @@ void func(int val) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "value": "10"
// CHECK-NEXT: },
// CHECK-NEXT: {
Expand All @@ -614,7 +610,7 @@ void func(int val) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "value": "10"
// CHECK-NEXT: }
// CHECK-NEXT: ]
Expand All @@ -641,7 +637,6 @@ void func(int val) {
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "IfStmt",
// CHECK-NEXT: "range": {
// CHECK-NEXT: "begin": {
Expand Down Expand Up @@ -722,7 +717,7 @@ void func(int val) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "value": "12"
// CHECK-NEXT: }
// CHECK-NEXT: ]
Expand All @@ -747,7 +742,7 @@ void func(int val) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "bool"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "IntegralToBoolean",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand All @@ -768,7 +763,7 @@ void func(int val) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "LValueToRValue",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand Down Expand Up @@ -823,7 +818,6 @@ void func(int val) {
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "IfStmt",
// CHECK-NEXT: "range": {
// CHECK-NEXT: "begin": {
Expand Down Expand Up @@ -904,7 +898,7 @@ void func(int val) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "value": "12"
// CHECK-NEXT: }
// CHECK-NEXT: ]
Expand All @@ -929,7 +923,7 @@ void func(int val) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "bool"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "IntegralToBoolean",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand All @@ -950,7 +944,7 @@ void func(int val) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "LValueToRValue",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand Down
2 changes: 1 addition & 1 deletion clang/test/AST/ast-dump-objc-arc-json.m
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ id TestCompoundLiteral(id a) {
// CHECK-NEXT: "qualType": "id",
// CHECK-NEXT: "typeAliasDeclId": "0x{{.*}}"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "cleanupsHaveSideEffects": true,
// CHECK-NEXT: "cleanups": [
// CHECK-NEXT: {
Expand Down
4 changes: 1 addition & 3 deletions clang/test/AST/ast-dump-record-definition-data-json.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5012,7 +5012,6 @@ struct DoesNotAllowConstDefaultInit {
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "CXXRecordDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "offset": 1675,
Expand Down Expand Up @@ -5155,15 +5154,14 @@ struct DoesNotAllowConstDefaultInit {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "value": "12"
// CHECK-NEXT: }
// CHECK-NEXT: ]
// CHECK-NEXT: }
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "CXXRecordDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "offset": 1725,
Expand Down
28 changes: 12 additions & 16 deletions clang/test/AST/ast-dump-records-json.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,6 @@ struct Derived6 : virtual public Bases... {
// CHECK-NEXT: "tagUsed": "struct"
// CHECK-NEXT: }


// CHECK: "kind": "CXXRecordDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "offset": 123,
Expand Down Expand Up @@ -366,7 +365,7 @@ struct Derived6 : virtual public Bases... {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "value": "12",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand All @@ -387,7 +386,7 @@ struct Derived6 : virtual public Bases... {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "value": "12"
// CHECK-NEXT: }
// CHECK-NEXT: ]
Expand Down Expand Up @@ -438,7 +437,7 @@ struct Derived6 : virtual public Bases... {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "value": "0",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand All @@ -459,7 +458,7 @@ struct Derived6 : virtual public Bases... {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "value": "0"
// CHECK-NEXT: }
// CHECK-NEXT: ]
Expand Down Expand Up @@ -511,7 +510,7 @@ struct Derived6 : virtual public Bases... {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "value": "10",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand All @@ -532,7 +531,7 @@ struct Derived6 : virtual public Bases... {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "value": "10"
// CHECK-NEXT: }
// CHECK-NEXT: ]
Expand Down Expand Up @@ -568,7 +567,6 @@ struct Derived6 : virtual public Bases... {
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "CXXRecordDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "offset": 206,
Expand Down Expand Up @@ -1418,7 +1416,6 @@ struct Derived6 : virtual public Bases... {
// CHECK-NEXT: "tagUsed": "union"
// CHECK-NEXT: }


// CHECK: "kind": "CXXRecordDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "offset": 388,
Expand Down Expand Up @@ -1638,7 +1635,7 @@ struct Derived6 : virtual public Bases... {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "value": "12",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand All @@ -1659,7 +1656,7 @@ struct Derived6 : virtual public Bases... {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "value": "12"
// CHECK-NEXT: }
// CHECK-NEXT: ]
Expand Down Expand Up @@ -1710,7 +1707,7 @@ struct Derived6 : virtual public Bases... {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "value": "0",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand All @@ -1731,7 +1728,7 @@ struct Derived6 : virtual public Bases... {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "value": "0"
// CHECK-NEXT: }
// CHECK-NEXT: ]
Expand Down Expand Up @@ -1783,7 +1780,7 @@ struct Derived6 : virtual public Bases... {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "value": "10",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand All @@ -1804,7 +1801,7 @@ struct Derived6 : virtual public Bases... {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "value": "10"
// CHECK-NEXT: }
// CHECK-NEXT: ]
Expand Down Expand Up @@ -1840,7 +1837,6 @@ struct Derived6 : virtual public Bases... {
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "CXXRecordDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "offset": 470,
Expand Down
211 changes: 99 additions & 112 deletions clang/test/AST/ast-dump-stmt-json.c

Large diffs are not rendered by default.

174 changes: 81 additions & 93 deletions clang/test/AST/ast-dump-stmt-json.cpp

Large diffs are not rendered by default.

15 changes: 6 additions & 9 deletions clang/test/AST/ast-dump-stmt-json.m
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ void TestObjCAtCatchStmt() {

// NOTE: CHECK lines have been autogenerated by gen_ast_dump_json_test.py


// CHECK: "kind": "FunctionDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "offset": 143,
Expand Down Expand Up @@ -113,7 +112,7 @@ void TestObjCAtCatchStmt() {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "void (^)(void)"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "cleanupsHaveSideEffects": true,
// CHECK-NEXT: "cleanups": [
// CHECK-NEXT: {
Expand All @@ -140,7 +139,7 @@ void TestObjCAtCatchStmt() {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "void (^)(void)"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
// CHECK-NEXT: "id": "0x{{.*}}",
Expand Down Expand Up @@ -208,7 +207,7 @@ void TestObjCAtCatchStmt() {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "LValueToRValue",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand Down Expand Up @@ -254,7 +253,6 @@ void TestObjCAtCatchStmt() {
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "FunctionDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "offset": 185,
Expand Down Expand Up @@ -346,7 +344,7 @@ void TestObjCAtCatchStmt() {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "void (^)(void)"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "cleanupsHaveSideEffects": true,
// CHECK-NEXT: "cleanups": [
// CHECK-NEXT: {
Expand All @@ -373,7 +371,7 @@ void TestObjCAtCatchStmt() {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "void (^)(void)"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
// CHECK-NEXT: "id": "0x{{.*}}",
Expand Down Expand Up @@ -441,7 +439,7 @@ void TestObjCAtCatchStmt() {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "LValueToRValue",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand Down Expand Up @@ -487,7 +485,6 @@ void TestObjCAtCatchStmt() {
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "FunctionDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "offset": 252,
Expand Down
3 changes: 1 addition & 2 deletions clang/test/AST/ast-dump-template-decls-json.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,6 @@ void i();

// NOTE: CHECK lines have been autogenerated by gen_ast_dump_json_test.py


// CHECK: "kind": "TranslationUnitDecl",
// CHECK-NEXT: "loc": {},
// CHECK-NEXT: "range": {
Expand Down Expand Up @@ -1063,7 +1062,7 @@ void i();
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "referencedDecl": {
// CHECK-NEXT: "id": "0x{{.*}}",
// CHECK-NEXT: "kind": "NonTypeTemplateParmDecl",
Expand Down
23 changes: 10 additions & 13 deletions clang/test/AST/ast-dump-temporaries-json.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ void MaterializeTemp() {
// NOTE: CHECK lines have been autogenerated by gen_ast_dump_json_test.py
// using --filters=ExprWithCleanups


// CHECK: "kind": "ExprWithCleanups",
// CHECK-NEXT: "range": {
// CHECK-NEXT: "begin": {
Expand Down Expand Up @@ -89,7 +88,7 @@ void MaterializeTemp() {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "const S"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "NoOp",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand All @@ -110,7 +109,7 @@ void MaterializeTemp() {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "S"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "temp": "0x{{.*}}",
// CHECK-NEXT: "dtor": {
// CHECK-NEXT: "id": "0x{{.*}}",
Expand Down Expand Up @@ -139,7 +138,7 @@ void MaterializeTemp() {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "S"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "ctorType": {
// CHECK-NEXT: "qualType": "void ()"
// CHECK-NEXT: },
Expand All @@ -155,7 +154,6 @@ void MaterializeTemp() {
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "ExprWithCleanups",
// CHECK-NEXT: "range": {
// CHECK-NEXT: "begin": {
Expand Down Expand Up @@ -222,7 +220,7 @@ void MaterializeTemp() {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "const int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "FloatingToIntegral",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand All @@ -243,7 +241,7 @@ void MaterializeTemp() {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "double"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "value": "1"
// CHECK-NEXT: }
// CHECK-NEXT: ]
Expand All @@ -253,7 +251,6 @@ void MaterializeTemp() {
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "ExprWithCleanups",
// CHECK-NEXT: "range": {
// CHECK-NEXT: "begin": {
Expand All @@ -271,7 +268,7 @@ void MaterializeTemp() {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "void"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
// CHECK-NEXT: "id": "0x{{.*}}",
Expand All @@ -291,7 +288,7 @@ void MaterializeTemp() {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "void"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
// CHECK-NEXT: "id": "0x{{.*}}",
Expand All @@ -311,7 +308,7 @@ void MaterializeTemp() {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "void (*)(const int &)"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "FunctionToPointerDecay",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand Down Expand Up @@ -384,7 +381,7 @@ void MaterializeTemp() {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "const int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "FloatingToIntegral",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand All @@ -405,7 +402,7 @@ void MaterializeTemp() {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "float"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "LValueToRValue",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand Down
3 changes: 1 addition & 2 deletions clang/test/AST/ast-dump-types-errors-json.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

using TestContainsErrors = int[sizeof(undef())];


// CHECK: "kind": "TypeAliasDecl",
// CHECK-NEXT: "loc": {
// CHECK-NEXT: "offset": 130,
Expand Down Expand Up @@ -63,7 +62,7 @@ using TestContainsErrors = int[sizeof(undef())];
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "unsigned long"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "name": "sizeof",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand Down
40 changes: 16 additions & 24 deletions clang/test/AST/multistep-explicit-cast-json.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ signed char cstylecast_3(signed int x) {
// NOTE: CHECK lines have been autogenerated by gen_ast_dump_json_test.py
// using --filters=ImplicitCastExpr,CStyleCastExpr


// CHECK: "kind": "ImplicitCastExpr",
// CHECK-NEXT: "range": {
// CHECK-NEXT: "begin": {
Expand All @@ -54,7 +53,7 @@ signed char cstylecast_3(signed int x) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "unsigned char"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "IntegralCast",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand All @@ -75,7 +74,7 @@ signed char cstylecast_3(signed int x) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "unsigned int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "LValueToRValue",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand Down Expand Up @@ -111,7 +110,6 @@ signed char cstylecast_3(signed int x) {
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "ImplicitCastExpr",
// CHECK-NEXT: "range": {
// CHECK-NEXT: "begin": {
Expand All @@ -128,7 +126,7 @@ signed char cstylecast_3(signed int x) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "signed char"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "IntegralCast",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand All @@ -149,7 +147,7 @@ signed char cstylecast_3(signed int x) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "unsigned int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "LValueToRValue",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand Down Expand Up @@ -185,7 +183,6 @@ signed char cstylecast_3(signed int x) {
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "ImplicitCastExpr",
// CHECK-NEXT: "range": {
// CHECK-NEXT: "begin": {
Expand All @@ -202,7 +199,7 @@ signed char cstylecast_3(signed int x) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "unsigned char"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "IntegralCast",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand All @@ -223,7 +220,7 @@ signed char cstylecast_3(signed int x) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "LValueToRValue",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand Down Expand Up @@ -259,7 +256,6 @@ signed char cstylecast_3(signed int x) {
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "ImplicitCastExpr",
// CHECK-NEXT: "range": {
// CHECK-NEXT: "begin": {
Expand All @@ -276,7 +272,7 @@ signed char cstylecast_3(signed int x) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "signed char"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "IntegralCast",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand All @@ -297,7 +293,7 @@ signed char cstylecast_3(signed int x) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "LValueToRValue",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand Down Expand Up @@ -333,7 +329,6 @@ signed char cstylecast_3(signed int x) {
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "CStyleCastExpr",
// CHECK-NEXT: "range": {
// CHECK-NEXT: "begin": {
Expand All @@ -350,7 +345,7 @@ signed char cstylecast_3(signed int x) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "unsigned char"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "IntegralCast",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand All @@ -371,7 +366,7 @@ signed char cstylecast_3(signed int x) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "unsigned int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "LValueToRValue",
// CHECK-NEXT: "isPartOfExplicitCast": true,
// CHECK-NEXT: "inner": [
Expand Down Expand Up @@ -408,7 +403,6 @@ signed char cstylecast_3(signed int x) {
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "CStyleCastExpr",
// CHECK-NEXT: "range": {
// CHECK-NEXT: "begin": {
Expand All @@ -425,7 +419,7 @@ signed char cstylecast_3(signed int x) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "signed char"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "IntegralCast",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand All @@ -446,7 +440,7 @@ signed char cstylecast_3(signed int x) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "unsigned int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "LValueToRValue",
// CHECK-NEXT: "isPartOfExplicitCast": true,
// CHECK-NEXT: "inner": [
Expand Down Expand Up @@ -483,7 +477,6 @@ signed char cstylecast_3(signed int x) {
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "CStyleCastExpr",
// CHECK-NEXT: "range": {
// CHECK-NEXT: "begin": {
Expand All @@ -500,7 +493,7 @@ signed char cstylecast_3(signed int x) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "unsigned char"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "IntegralCast",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand All @@ -521,7 +514,7 @@ signed char cstylecast_3(signed int x) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "LValueToRValue",
// CHECK-NEXT: "isPartOfExplicitCast": true,
// CHECK-NEXT: "inner": [
Expand Down Expand Up @@ -558,7 +551,6 @@ signed char cstylecast_3(signed int x) {
// CHECK-NEXT: ]
// CHECK-NEXT: }


// CHECK: "kind": "CStyleCastExpr",
// CHECK-NEXT: "range": {
// CHECK-NEXT: "begin": {
Expand All @@ -575,7 +567,7 @@ signed char cstylecast_3(signed int x) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "signed char"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "IntegralCast",
// CHECK-NEXT: "inner": [
// CHECK-NEXT: {
Expand All @@ -596,7 +588,7 @@ signed char cstylecast_3(signed int x) {
// CHECK-NEXT: "type": {
// CHECK-NEXT: "qualType": "int"
// CHECK-NEXT: },
// CHECK-NEXT: "valueCategory": "rvalue",
// CHECK-NEXT: "valueCategory": "prvalue",
// CHECK-NEXT: "castKind": "LValueToRValue",
// CHECK-NEXT: "isPartOfExplicitCast": true,
// CHECK-NEXT: "inner": [
Expand Down
Loading