clang  6.0.0svn
APSIntType.cpp
Go to the documentation of this file.
1 //===--- APSIntType.cpp - Simple record of the type of APSInts ------------===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
11 
12 using namespace clang;
13 using namespace ento;
14 
16 APSIntType::testInRange(const llvm::APSInt &Value,
17  bool AllowSignConversions) const {
18 
19  // Negative numbers cannot be losslessly converted to unsigned type.
20  if (IsUnsigned && !AllowSignConversions &&
21  Value.isSigned() && Value.isNegative())
22  return RTR_Below;
23 
24  unsigned MinBits;
25  if (AllowSignConversions) {
26  if (Value.isSigned() && !IsUnsigned)
27  MinBits = Value.getMinSignedBits();
28  else
29  MinBits = Value.getActiveBits();
30 
31  } else {
32  // Signed integers can be converted to signed integers of the same width
33  // or (if positive) unsigned integers with one fewer bit.
34  // Unsigned integers can be converted to unsigned integers of the same width
35  // or signed integers with one more bit.
36  if (Value.isSigned())
37  MinBits = Value.getMinSignedBits() - IsUnsigned;
38  else
39  MinBits = Value.getActiveBits() + !IsUnsigned;
40  }
41 
42  if (MinBits <= BitWidth)
43  return RTR_Within;
44 
45  if (Value.isSigned() && Value.isNegative())
46  return RTR_Below;
47  else
48  return RTR_Above;
49 }
Value is less than the minimum representable value.
Definition: APSIntType.h:78
Value is representable using this type.
Definition: APSIntType.h:79
RangeTestResultKind testInRange(const llvm::APSInt &Val, bool AllowMixedSign) const LLVM_READONLY
Tests whether a given value is losslessly representable using this type.
Definition: APSIntType.cpp:16
Value is greater than the maximum representable value.
Definition: APSIntType.h:80
RangeTestResultKind
Used to classify whether a value is representable using this type.
Definition: APSIntType.h:77
Dataflow Directional Tag Classes.