AST - silence static analyzer getAs<> null dereference warnings. NFCI.

The static analyzer is warning about potential null dereferences, but in these cases we should be able to use castAs<> directly and if not assert will fire for us.

llvm-svn: 373904
This commit is contained in:
Simon Pilgrim 2019-10-07 13:58:05 +00:00
parent b63db94fa5
commit 3459a4c770
6 changed files with 11 additions and 14 deletions

View File

@ -251,7 +251,7 @@ QualType CXXDeleteExpr::getDestroyedType() const {
if (ArgType->isDependentType() && !ArgType->isPointerType()) if (ArgType->isDependentType() && !ArgType->isPointerType())
return QualType(); return QualType();
return ArgType->getAs<PointerType>()->getPointeeType(); return ArgType->castAs<PointerType>()->getPointeeType();
} }
// CXXPseudoDestructorExpr // CXXPseudoDestructorExpr
@ -1512,11 +1512,8 @@ CXXRecordDecl *UnresolvedMemberExpr::getNamingClass() {
// Otherwise the naming class must have been the base class. // Otherwise the naming class must have been the base class.
else { else {
QualType BaseType = getBaseType().getNonReferenceType(); QualType BaseType = getBaseType().getNonReferenceType();
if (isArrow()) { if (isArrow())
const auto *PT = BaseType->getAs<PointerType>(); BaseType = BaseType->castAs<PointerType>()->getPointeeType();
assert(PT && "base of arrow member access is not pointer");
BaseType = PT->getPointeeType();
}
Record = BaseType->getAsCXXRecordDecl(); Record = BaseType->getAsCXXRecordDecl();
assert(Record && "base of member expression does not name record"); assert(Record && "base of member expression does not name record");

View File

@ -123,7 +123,7 @@ llvm::Optional<unsigned> Program::getOrCreateDummy(const ParmVarDecl *PD) {
auto &ASTCtx = Ctx.getASTContext(); auto &ASTCtx = Ctx.getASTContext();
// Create a pointer to an incomplete array of the specified elements. // Create a pointer to an incomplete array of the specified elements.
QualType ElemTy = PD->getType()->getAs<PointerType>()->getPointeeType(); QualType ElemTy = PD->getType()->castAs<PointerType>()->getPointeeType();
QualType Ty = ASTCtx.getIncompleteArrayType(ElemTy, ArrayType::Normal, 0); QualType Ty = ASTCtx.getIncompleteArrayType(ElemTy, ArrayType::Normal, 0);
// Dedup blocks since they are immutable and pointers cannot be compared. // Dedup blocks since they are immutable and pointers cannot be compared.

View File

@ -386,7 +386,7 @@ public:
auto hasDefaultCXXMethodCC = [](ASTContext &C, const CXXMethodDecl *MD) { auto hasDefaultCXXMethodCC = [](ASTContext &C, const CXXMethodDecl *MD) {
auto DefaultCC = C.getDefaultCallingConvention(/*IsVariadic=*/false, auto DefaultCC = C.getDefaultCallingConvention(/*IsVariadic=*/false,
/*IsCXXMethod=*/true); /*IsCXXMethod=*/true);
auto CC = MD->getType()->getAs<FunctionProtoType>()->getCallConv(); auto CC = MD->getType()->castAs<FunctionProtoType>()->getCallConv();
return CC == DefaultCC; return CC == DefaultCC;
}; };

View File

@ -1102,7 +1102,7 @@ void StmtPrinter::VisitIntegerLiteral(IntegerLiteral *Node) {
OS << Node->getValue().toString(10, isSigned); OS << Node->getValue().toString(10, isSigned);
// Emit suffixes. Integer literals are always a builtin integer type. // Emit suffixes. Integer literals are always a builtin integer type.
switch (Node->getType()->getAs<BuiltinType>()->getKind()) { switch (Node->getType()->castAs<BuiltinType>()->getKind()) {
default: llvm_unreachable("Unexpected type for integer literal!"); default: llvm_unreachable("Unexpected type for integer literal!");
case BuiltinType::Char_S: case BuiltinType::Char_S:
case BuiltinType::Char_U: OS << "i8"; break; case BuiltinType::Char_U: OS << "i8"; break;
@ -1123,7 +1123,7 @@ void StmtPrinter::VisitFixedPointLiteral(FixedPointLiteral *Node) {
return; return;
OS << Node->getValueAsString(/*Radix=*/10); OS << Node->getValueAsString(/*Radix=*/10);
switch (Node->getType()->getAs<BuiltinType>()->getKind()) { switch (Node->getType()->castAs<BuiltinType>()->getKind()) {
default: llvm_unreachable("Unexpected type for fixed point literal!"); default: llvm_unreachable("Unexpected type for fixed point literal!");
case BuiltinType::ShortFract: OS << "hr"; break; case BuiltinType::ShortFract: OS << "hr"; break;
case BuiltinType::ShortAccum: OS << "hk"; break; case BuiltinType::ShortAccum: OS << "hk"; break;
@ -1152,7 +1152,7 @@ static void PrintFloatingLiteral(raw_ostream &OS, FloatingLiteral *Node,
return; return;
// Emit suffixes. Float literals are always a builtin float type. // Emit suffixes. Float literals are always a builtin float type.
switch (Node->getType()->getAs<BuiltinType>()->getKind()) { switch (Node->getType()->castAs<BuiltinType>()->getKind()) {
default: llvm_unreachable("Unexpected type for float literal!"); default: llvm_unreachable("Unexpected type for float literal!");
case BuiltinType::Half: break; // FIXME: suffix? case BuiltinType::Half: break; // FIXME: suffix?
case BuiltinType::Double: break; // no suffix. case BuiltinType::Double: break; // no suffix.
@ -1952,7 +1952,7 @@ void StmtPrinter::VisitLambdaExpr(LambdaExpr *Node) {
if (Node->isMutable()) if (Node->isMutable())
OS << " mutable"; OS << " mutable";
auto *Proto = Method->getType()->getAs<FunctionProtoType>(); auto *Proto = Method->getType()->castAs<FunctionProtoType>();
Proto->printExceptionSpecification(OS, Policy); Proto->printExceptionSpecification(OS, Policy);
// FIXME: Attributes // FIXME: Attributes

View File

@ -370,7 +370,7 @@ TemplateArgument TemplateArgument::getPackExpansionPattern() const {
switch (getKind()) { switch (getKind()) {
case Type: case Type:
return getAsType()->getAs<PackExpansionType>()->getPattern(); return getAsType()->castAs<PackExpansionType>()->getPattern();
case Expression: case Expression:
return cast<PackExpansionExpr>(getAsExpr())->getPattern(); return cast<PackExpansionExpr>(getAsExpr())->getPattern();

View File

@ -1537,7 +1537,7 @@ void TypePrinter::printAttributedAfter(const AttributedType *T,
QualType t = T->getEquivalentType(); QualType t = T->getEquivalentType();
while (!t->isFunctionType()) while (!t->isFunctionType())
t = t->getPointeeType(); t = t->getPointeeType();
OS << (t->getAs<FunctionType>()->getCallConv() == CC_AAPCS ? OS << (t->castAs<FunctionType>()->getCallConv() == CC_AAPCS ?
"\"aapcs\"" : "\"aapcs-vfp\""); "\"aapcs\"" : "\"aapcs-vfp\"");
OS << ')'; OS << ')';
break; break;