34 if (isa<PointerType>(From) && isa<PointerType>(To)) {
67 bool NeedParen =
true;
68 if (isa<ArraySubscriptExpr>(
Expr) ||
69 isa<CallExpr>(
Expr) ||
70 isa<DeclRefExpr>(
Expr) ||
71 isa<CastExpr>(
Expr) ||
72 isa<CXXNewExpr>(
Expr) ||
73 isa<CXXConstructExpr>(
Expr) ||
74 isa<CXXDeleteExpr>(
Expr) ||
75 isa<CXXNoexceptExpr>(
Expr) ||
76 isa<CXXPseudoDestructorExpr>(
Expr) ||
77 isa<CXXScalarValueInitExpr>(
Expr) ||
78 isa<CXXThisExpr>(
Expr) ||
79 isa<CXXTypeidExpr>(
Expr) ||
80 isa<CXXUnresolvedConstructExpr>(
Expr) ||
81 isa<ObjCMessageExpr>(
Expr) ||
82 isa<ObjCPropertyRefExpr>(
Expr) ||
83 isa<ObjCProtocolExpr>(
Expr) ||
84 isa<MemberExpr>(
Expr) ||
86 isa<ParenListExpr>(
Expr) ||
87 isa<SizeOfPackExpr>(
Expr) ||
88 isa<UnaryOperator>(
Expr))
93 if (
const PointerType *FromPtrTy = dyn_cast<PointerType>(FromQTy)) {
106 if (UO->getOpcode() == UO_AddrOf) {
111 }
else if (NeedParen) {
127 if (
const auto *ToPtrTy = dyn_cast<PointerType>(ToQTy)) {
128 bool CanConvert =
false;
136 if (isa<PointerType>(FromQTy) && ToPtrTy->isVoidPointerType())
144 if (UO->getOpcode() == UO_Deref) {
149 }
else if (NeedParen) {
177 return std::string();