forked from OSchip/llvm-project
parent
02ca17906d
commit
d3e1dede4a
|
@ -6215,7 +6215,7 @@ static IntRange GetValueRange(ASTContext &C, APValue &result, QualType Ty,
|
|||
return IntRange(MaxWidth, Ty->isUnsignedIntegerOrEnumerationType());
|
||||
}
|
||||
|
||||
static QualType GetExprType(Expr *E) {
|
||||
static QualType GetExprType(const Expr *E) {
|
||||
QualType Ty = E->getType();
|
||||
if (const AtomicType *AtomicRHS = Ty->getAs<AtomicType>())
|
||||
Ty = AtomicRHS->getValueType();
|
||||
|
@ -6226,7 +6226,7 @@ static QualType GetExprType(Expr *E) {
|
|||
/// range of values it might take.
|
||||
///
|
||||
/// \param MaxWidth - the width to which the value will be truncated
|
||||
static IntRange GetExprRange(ASTContext &C, Expr *E, unsigned MaxWidth) {
|
||||
static IntRange GetExprRange(ASTContext &C, const Expr *E, unsigned MaxWidth) {
|
||||
E = E->IgnoreParens();
|
||||
|
||||
// Try a full evaluation first.
|
||||
|
@ -6237,7 +6237,7 @@ static IntRange GetExprRange(ASTContext &C, Expr *E, unsigned MaxWidth) {
|
|||
// I think we only want to look through implicit casts here; if the
|
||||
// user has an explicit widening cast, we should treat the value as
|
||||
// being of the new, wider type.
|
||||
if (ImplicitCastExpr *CE = dyn_cast<ImplicitCastExpr>(E)) {
|
||||
if (const auto *CE = dyn_cast<ImplicitCastExpr>(E)) {
|
||||
if (CE->getCastKind() == CK_NoOp || CE->getCastKind() == CK_LValueToRValue)
|
||||
return GetExprRange(C, CE->getSubExpr(), MaxWidth);
|
||||
|
||||
|
@ -6264,7 +6264,7 @@ static IntRange GetExprRange(ASTContext &C, Expr *E, unsigned MaxWidth) {
|
|||
SubRange.NonNegative || OutputTypeRange.NonNegative);
|
||||
}
|
||||
|
||||
if (ConditionalOperator *CO = dyn_cast<ConditionalOperator>(E)) {
|
||||
if (const auto *CO = dyn_cast<ConditionalOperator>(E)) {
|
||||
// If we can fold the condition, just take that operand.
|
||||
bool CondResult;
|
||||
if (CO->getCond()->EvaluateAsBooleanCondition(CondResult, C))
|
||||
|
@ -6278,7 +6278,7 @@ static IntRange GetExprRange(ASTContext &C, Expr *E, unsigned MaxWidth) {
|
|||
return IntRange::join(L, R);
|
||||
}
|
||||
|
||||
if (BinaryOperator *BO = dyn_cast<BinaryOperator>(E)) {
|
||||
if (const auto *BO = dyn_cast<BinaryOperator>(E)) {
|
||||
switch (BO->getOpcode()) {
|
||||
|
||||
// Boolean-valued operations are single-bit and positive.
|
||||
|
@ -6418,7 +6418,7 @@ static IntRange GetExprRange(ASTContext &C, Expr *E, unsigned MaxWidth) {
|
|||
return IntRange::join(L, R);
|
||||
}
|
||||
|
||||
if (UnaryOperator *UO = dyn_cast<UnaryOperator>(E)) {
|
||||
if (const auto *UO = dyn_cast<UnaryOperator>(E)) {
|
||||
switch (UO->getOpcode()) {
|
||||
// Boolean-valued operations are white-listed.
|
||||
case UO_LNot:
|
||||
|
@ -6434,17 +6434,17 @@ static IntRange GetExprRange(ASTContext &C, Expr *E, unsigned MaxWidth) {
|
|||
}
|
||||
}
|
||||
|
||||
if (OpaqueValueExpr *OVE = dyn_cast<OpaqueValueExpr>(E))
|
||||
if (const auto *OVE = dyn_cast<OpaqueValueExpr>(E))
|
||||
return GetExprRange(C, OVE->getSourceExpr(), MaxWidth);
|
||||
|
||||
if (FieldDecl *BitField = E->getSourceBitField())
|
||||
if (const auto *BitField = E->getSourceBitField())
|
||||
return IntRange(BitField->getBitWidthValue(C),
|
||||
BitField->getType()->isUnsignedIntegerOrEnumerationType());
|
||||
|
||||
return IntRange::forValueOfType(C, GetExprType(E));
|
||||
}
|
||||
|
||||
static IntRange GetExprRange(ASTContext &C, Expr *E) {
|
||||
static IntRange GetExprRange(ASTContext &C, const Expr *E) {
|
||||
return GetExprRange(C, E, C.getIntWidth(GetExprType(E)));
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue