Lines Matching refs:Cl

24 using Cl = Expr::Classification;  typedef
26 static Cl::Kinds ClassifyInternal(ASTContext &Ctx, const Expr *E);
27 static Cl::Kinds ClassifyDecl(ASTContext &Ctx, const Decl *D);
28 static Cl::Kinds ClassifyUnnamed(ASTContext &Ctx, QualType T);
29 static Cl::Kinds ClassifyMemberExpr(ASTContext &Ctx, const MemberExpr *E);
30 static Cl::Kinds ClassifyBinaryOp(ASTContext &Ctx, const BinaryOperator *E);
31 static Cl::Kinds ClassifyConditional(ASTContext &Ctx,
34 static Cl::ModifiableType IsModifiable(ASTContext &Ctx, const Expr *E,
35 Cl::Kinds Kind, SourceLocation &Loc);
37 Cl Expr::ClassifyImpl(ASTContext &Ctx, SourceLocation *Loc) const { in ClassifyImpl()
40 Cl::Kinds kind = ClassifyInternal(Ctx, this); in ClassifyImpl()
46 kind = Cl::CL_Function; in ClassifyImpl()
51 kind = (kind == Cl::CL_LValue ? Cl::CL_AddressableVoid : Cl::CL_Void); in ClassifyImpl()
56 case Cl::CL_LValue: in ClassifyImpl()
59 case Cl::CL_XValue: in ClassifyImpl()
62 case Cl::CL_Function: in ClassifyImpl()
63 case Cl::CL_Void: in ClassifyImpl()
64 case Cl::CL_AddressableVoid: in ClassifyImpl()
65 case Cl::CL_DuplicateVectorComponents: in ClassifyImpl()
66 case Cl::CL_MemberFunction: in ClassifyImpl()
67 case Cl::CL_SubObjCPropertySetting: in ClassifyImpl()
68 case Cl::CL_ClassTemporary: in ClassifyImpl()
69 case Cl::CL_ArrayTemporary: in ClassifyImpl()
70 case Cl::CL_ObjCMessageRValue: in ClassifyImpl()
71 case Cl::CL_PRValue: in ClassifyImpl()
76 Cl::ModifiableType modifiable = Cl::CM_Untested; in ClassifyImpl()
83 static Cl::Kinds ClassifyTemporary(QualType T) { in ClassifyTemporary()
85 return Cl::CL_ClassTemporary; in ClassifyTemporary()
87 return Cl::CL_ArrayTemporary; in ClassifyTemporary()
91 return Cl::CL_PRValue; in ClassifyTemporary()
94 static Cl::Kinds ClassifyExprValueKind(const LangOptions &Lang, in ClassifyExprValueKind()
99 return Lang.CPlusPlus ? ClassifyTemporary(E->getType()) : Cl::CL_PRValue; in ClassifyExprValueKind()
101 return Cl::CL_LValue; in ClassifyExprValueKind()
103 return Cl::CL_XValue; in ClassifyExprValueKind()
108 static Cl::Kinds ClassifyInternal(ASTContext &Ctx, const Expr *E) { in ClassifyInternal()
151 return Cl::CL_LValue; in ClassifyInternal()
156 return !E->isLValue() ? ClassifyTemporary(E->getType()) : Cl::CL_LValue; in ClassifyInternal()
205 return Cl::CL_PRValue; in ClassifyInternal()
209 return Lang.HLSL ? Cl::CL_LValue : Cl::CL_PRValue; in ClassifyInternal()
233 return Cl::CL_LValue; in ClassifyInternal()
244 ? Cl::CL_PRValue : Cl::CL_LValue; in ClassifyInternal()
257 return Cl::CL_LValue; in ClassifyInternal()
268 Cl::Kinds K = ClassifyInternal(Ctx, Op); in ClassifyInternal()
269 if (K != Cl::CL_LValue) return K; in ClassifyInternal()
272 return Cl::CL_SubObjCPropertySetting; in ClassifyInternal()
273 return Cl::CL_LValue; in ClassifyInternal()
281 return Lang.CPlusPlus ? Cl::CL_LValue : Cl::CL_PRValue; in ClassifyInternal()
284 return Cl::CL_PRValue; in ClassifyInternal()
311 return Cl::CL_PRValue; in ClassifyInternal()
319 return Cl::CL_PRValue; in ClassifyInternal()
340 return Cl::CL_DuplicateVectorComponents; in ClassifyInternal()
342 return Cl::CL_LValue; in ClassifyInternal()
372 if (!Lang.CPlusPlus) return Cl::CL_PRValue; in ClassifyInternal()
380 if (!Lang.CPlusPlus) return Cl::CL_PRValue; in ClassifyInternal()
387 if (!Lang.CPlusPlus) return Cl::CL_PRValue; in ClassifyInternal()
397 Cl::Kinds kind = ClassifyUnnamed(Ctx, Method->getReturnType()); in ClassifyInternal()
398 return (kind == Cl::CL_PRValue) ? Cl::CL_ObjCMessageRValue : kind; in ClassifyInternal()
400 return Cl::CL_PRValue; in ClassifyInternal()
408 return Cl::CL_ClassTemporary; in ClassifyInternal()
420 return Cl::CL_PRValue; in ClassifyInternal()
428 ? Cl::CL_LValue in ClassifyInternal()
429 : Cl::CL_XValue; in ClassifyInternal()
446 return Cl::CL_PRValue; in ClassifyInternal()
451 return Cl::CL_ArrayTemporary; in ClassifyInternal()
452 return Cl::CL_ClassTemporary; in ClassifyInternal()
460 static Cl::Kinds ClassifyDecl(ASTContext &Ctx, const Decl *D) { in ClassifyDecl()
470 return Cl::CL_MemberFunction; in ClassifyDecl()
472 return Cl::CL_LValue; in ClassifyDecl()
473 return Cl::CL_PRValue; in ClassifyDecl()
487 return islvalue ? Cl::CL_LValue : Cl::CL_PRValue; in ClassifyDecl()
493 static Cl::Kinds ClassifyUnnamed(ASTContext &Ctx, QualType T) { in ClassifyUnnamed()
495 if (!Ctx.getLangOpts().CPlusPlus) return Cl::CL_PRValue; in ClassifyUnnamed()
502 return Cl::CL_LValue; in ClassifyUnnamed()
507 return RV->getPointeeType()->isFunctionType() ? Cl::CL_LValue : Cl::CL_XValue; in ClassifyUnnamed()
510 static Cl::Kinds ClassifyMemberExpr(ASTContext &Ctx, const MemberExpr *E) { in ClassifyMemberExpr()
513 ? Cl::CL_PRValue : Cl::CL_LValue); in ClassifyMemberExpr()
521 return Cl::CL_LValue; in ClassifyMemberExpr()
525 return Cl::CL_SubObjCPropertySetting; in ClassifyMemberExpr()
535 return Cl::CL_LValue; in ClassifyMemberExpr()
540 return Cl::CL_LValue; in ClassifyMemberExpr()
548 return Cl::CL_LValue; in ClassifyMemberExpr()
551 return Cl::CL_SubObjCPropertySetting; in ClassifyMemberExpr()
561 return Cl::CL_LValue; in ClassifyMemberExpr()
563 return Cl::CL_MemberFunction; in ClassifyMemberExpr()
564 return Cl::CL_PRValue; in ClassifyMemberExpr()
569 return Cl::CL_PRValue; in ClassifyMemberExpr()
572 static Cl::Kinds ClassifyBinaryOp(ASTContext &Ctx, const BinaryOperator *E) { in ClassifyBinaryOp()
579 ? Cl::CL_PRValue : Cl::CL_LValue); in ClassifyBinaryOp()
592 ? Cl::CL_MemberFunction in ClassifyBinaryOp()
600 ? Cl::CL_MemberFunction in ClassifyBinaryOp()
601 : Cl::CL_LValue; in ClassifyBinaryOp()
604 return Cl::CL_PRValue; in ClassifyBinaryOp()
607 static Cl::Kinds ClassifyConditional(ASTContext &Ctx, const Expr *True, in ClassifyConditional()
626 return Cl::CL_PRValue; in ClassifyConditional()
634 Cl::Kinds LCl = ClassifyInternal(Ctx, True), in ClassifyConditional()
636 return LCl == RCl ? LCl : Cl::CL_PRValue; in ClassifyConditional()
639 static Cl::ModifiableType IsModifiable(ASTContext &Ctx, const Expr *E, in IsModifiable()
640 Cl::Kinds Kind, SourceLocation &Loc) { in IsModifiable()
643 if (Kind == Cl::CL_PRValue) { in IsModifiable()
649 return Cl::CM_LValueCast; in IsModifiable()
653 if (Kind != Cl::CL_LValue) in IsModifiable()
654 return Cl::CM_RValue; in IsModifiable()
659 return Cl::CM_Function; in IsModifiable()
666 return Cl::CM_NoSetterProperty; in IsModifiable()
672 return Cl::CM_ConstQualified; in IsModifiable()
675 return Cl::CM_ConstAddrSpace; in IsModifiable()
679 return Cl::CM_ArrayType; in IsModifiable()
682 return Cl::CM_IncompleteType; in IsModifiable()
687 return Cl::CM_ConstQualifiedField; in IsModifiable()
689 return Cl::CM_Modifiable; in IsModifiable()
695 case Cl::CL_LValue: return LV_Valid; in ClassifyLValue()
696 case Cl::CL_XValue: return LV_InvalidExpression; in ClassifyLValue()
697 case Cl::CL_Function: return LV_NotObjectType; in ClassifyLValue()
698 case Cl::CL_Void: return LV_InvalidExpression; in ClassifyLValue()
699 case Cl::CL_AddressableVoid: return LV_IncompleteVoidType; in ClassifyLValue()
700 case Cl::CL_DuplicateVectorComponents: return LV_DuplicateVectorComponents; in ClassifyLValue()
701 case Cl::CL_MemberFunction: return LV_MemberFunction; in ClassifyLValue()
702 case Cl::CL_SubObjCPropertySetting: return LV_SubObjCPropertySetting; in ClassifyLValue()
703 case Cl::CL_ClassTemporary: return LV_ClassTemporary; in ClassifyLValue()
704 case Cl::CL_ArrayTemporary: return LV_ArrayTemporary; in ClassifyLValue()
705 case Cl::CL_ObjCMessageRValue: return LV_InvalidMessageExpression; in ClassifyLValue()
706 case Cl::CL_PRValue: return LV_InvalidExpression; in ClassifyLValue()
716 case Cl::CL_LValue: break; in isModifiableLvalue()
717 case Cl::CL_XValue: return MLV_InvalidExpression; in isModifiableLvalue()
718 case Cl::CL_Function: return MLV_NotObjectType; in isModifiableLvalue()
719 case Cl::CL_Void: return MLV_InvalidExpression; in isModifiableLvalue()
720 case Cl::CL_AddressableVoid: return MLV_IncompleteVoidType; in isModifiableLvalue()
721 case Cl::CL_DuplicateVectorComponents: return MLV_DuplicateVectorComponents; in isModifiableLvalue()
722 case Cl::CL_MemberFunction: return MLV_MemberFunction; in isModifiableLvalue()
723 case Cl::CL_SubObjCPropertySetting: return MLV_SubObjCPropertySetting; in isModifiableLvalue()
724 case Cl::CL_ClassTemporary: return MLV_ClassTemporary; in isModifiableLvalue()
725 case Cl::CL_ArrayTemporary: return MLV_ArrayTemporary; in isModifiableLvalue()
726 case Cl::CL_ObjCMessageRValue: return MLV_InvalidMessageExpression; in isModifiableLvalue()
727 case Cl::CL_PRValue: in isModifiableLvalue()
728 return VC.getModifiable() == Cl::CM_LValueCast ? in isModifiableLvalue()
731 assert(VC.getKind() == Cl::CL_LValue && "Unhandled kind"); in isModifiableLvalue()
733 case Cl::CM_Untested: llvm_unreachable("Did not test modifiability"); in isModifiableLvalue()
734 case Cl::CM_Modifiable: return MLV_Valid; in isModifiableLvalue()
735 case Cl::CM_RValue: llvm_unreachable("CM_RValue and CL_LValue don't match"); in isModifiableLvalue()
736 case Cl::CM_Function: return MLV_NotObjectType; in isModifiableLvalue()
737 case Cl::CM_LValueCast: in isModifiableLvalue()
739 case Cl::CM_NoSetterProperty: return MLV_NoSetterProperty; in isModifiableLvalue()
740 case Cl::CM_ConstQualified: return MLV_ConstQualified; in isModifiableLvalue()
741 case Cl::CM_ConstQualifiedField: return MLV_ConstQualifiedField; in isModifiableLvalue()
742 case Cl::CM_ConstAddrSpace: return MLV_ConstAddrSpace; in isModifiableLvalue()
743 case Cl::CM_ArrayType: return MLV_ArrayType; in isModifiableLvalue()
744 case Cl::CM_IncompleteType: return MLV_IncompleteType; in isModifiableLvalue()