mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 12:43:36 +01:00
Use only explicit bool conversion operators
BitVector/SmallBitVector::reference::operator bool remain implicit since they model more exactly a bool, rather than something else that can be boolean tested. The most common (non-buggy) case are where such objects are used as return expressions in bool-returning functions or as boolean function arguments. In those cases I've used (& added if necessary) a named function to provide the equivalent (or sometimes negative, depending on convenient wording) test. One behavior change (YAMLParser) was made, though no test case is included as I'm not sure how to reach that code path. Essentially any comparison of llvm::yaml::document_iterators would be invalid if neither iterator was at the end. This helped uncover a couple of bugs in Clang - test cases provided for those in a separate commit along with similar changes to `operator bool` instances in Clang. llvm-svn: 181868
This commit is contained in:
parent
11831ffe02
commit
898763a097
@ -496,7 +496,7 @@ public:
|
||||
NodeRef() {}
|
||||
|
||||
/// operator bool - Detect a null ref.
|
||||
operator bool() const { return pip.getOpaqueValue(); }
|
||||
LLVM_EXPLICIT operator bool() const { return pip.getOpaqueValue(); }
|
||||
|
||||
/// NodeRef - Create a reference to the node p with n elements.
|
||||
template <typename NodeT>
|
||||
|
@ -70,8 +70,9 @@ public:
|
||||
|
||||
T *operator->() const { return Ptr; }
|
||||
T *get() const { return Ptr; }
|
||||
operator bool() const { return Ptr != 0; }
|
||||
LLVM_EXPLICIT operator bool() const { return Ptr != 0; }
|
||||
bool operator!() const { return Ptr == 0; }
|
||||
bool isValid() const { return Ptr != 0; }
|
||||
|
||||
void swap(OwningPtr &RHS) {
|
||||
T *Tmp = RHS.Ptr;
|
||||
@ -132,7 +133,7 @@ public:
|
||||
}
|
||||
|
||||
T *get() const { return Ptr; }
|
||||
operator bool() const { return Ptr != 0; }
|
||||
LLVM_EXPLICIT operator bool() const { return Ptr != 0; }
|
||||
bool operator!() const { return Ptr == 0; }
|
||||
|
||||
void swap(OwningArrayPtr &RHS) {
|
||||
|
@ -109,7 +109,7 @@ namespace llvm {
|
||||
// we recursively strip off low bits if we have a nested PointerUnion.
|
||||
return !PointerLikeTypeTraits<PT1>::getFromVoidPointer(Val.getPointer());
|
||||
}
|
||||
operator bool() const { return !isNull(); }
|
||||
LLVM_EXPLICIT operator bool() const { return !isNull(); }
|
||||
|
||||
/// is<T>() return true if the Union currently holds the type matching T.
|
||||
template<typename T>
|
||||
@ -175,6 +175,11 @@ namespace llvm {
|
||||
}
|
||||
};
|
||||
|
||||
template<typename PT1, typename PT2>
|
||||
bool operator==(PointerUnion<PT1, PT2> lhs, PointerUnion<PT1, PT2> rhs) {
|
||||
return lhs.getOpaqueValue() == rhs.getOpaqueValue();
|
||||
}
|
||||
|
||||
// Teach SmallPtrSet that PointerUnion is "basically a pointer", that has
|
||||
// # low bits available = min(PT1bits,PT2bits)-1.
|
||||
template<typename PT1, typename PT2>
|
||||
@ -251,7 +256,7 @@ namespace llvm {
|
||||
/// isNull - Return true if the pointer held in the union is null,
|
||||
/// regardless of which type it is.
|
||||
bool isNull() const { return Val.isNull(); }
|
||||
operator bool() const { return !isNull(); }
|
||||
LLVM_EXPLICIT operator bool() const { return !isNull(); }
|
||||
|
||||
/// is<T>() return true if the Union currently holds the type matching T.
|
||||
template<typename T>
|
||||
@ -359,7 +364,7 @@ namespace llvm {
|
||||
/// isNull - Return true if the pointer held in the union is null,
|
||||
/// regardless of which type it is.
|
||||
bool isNull() const { return Val.isNull(); }
|
||||
operator bool() const { return !isNull(); }
|
||||
LLVM_EXPLICIT operator bool() const { return !isNull(); }
|
||||
|
||||
/// is<T>() return true if the Union currently holds the type matching T.
|
||||
template<typename T>
|
||||
|
@ -77,7 +77,7 @@ public:
|
||||
}
|
||||
|
||||
/// \brief Test whether the inline cost is low enough for inlining.
|
||||
operator bool() const {
|
||||
LLVM_EXPLICIT operator bool() const {
|
||||
return Cost < Threshold;
|
||||
}
|
||||
|
||||
|
@ -162,7 +162,7 @@ namespace llvm {
|
||||
}
|
||||
|
||||
/// Return true for a valid index.
|
||||
operator bool() const { return isValid(); }
|
||||
LLVM_EXPLICIT operator bool() const { return isValid(); }
|
||||
|
||||
/// Print this index to the given raw_ostream.
|
||||
void print(raw_ostream &os) const;
|
||||
|
@ -78,7 +78,7 @@ public:
|
||||
|
||||
InstrTy *getInstruction() const { return I.getPointer(); }
|
||||
InstrTy *operator->() const { return I.getPointer(); }
|
||||
operator bool() const { return I.getPointer(); }
|
||||
LLVM_EXPLICIT operator bool() const { return I.getPointer(); }
|
||||
|
||||
/// getCalledValue - Return the pointer to function that is being called.
|
||||
///
|
||||
|
@ -516,7 +516,7 @@ public:
|
||||
if (isAtEnd() || Other.isAtEnd())
|
||||
return isAtEnd() && Other.isAtEnd();
|
||||
|
||||
return *Doc == *Other.Doc;
|
||||
return Doc == Other.Doc;
|
||||
}
|
||||
bool operator !=(const document_iterator &Other) {
|
||||
return !(*this == Other);
|
||||
@ -543,7 +543,7 @@ public:
|
||||
|
||||
private:
|
||||
bool isAtEnd() const {
|
||||
return Doc == 0 || *Doc == 0;
|
||||
return !Doc || !*Doc;
|
||||
}
|
||||
|
||||
OwningPtr<Document> *Doc;
|
||||
|
@ -89,7 +89,7 @@ bool MemoryDependenceAnalysis::runOnFunction(Function &) {
|
||||
AA = &getAnalysis<AliasAnalysis>();
|
||||
TD = getAnalysisIfAvailable<DataLayout>();
|
||||
DT = getAnalysisIfAvailable<DominatorTree>();
|
||||
if (PredCache == 0)
|
||||
if (!PredCache)
|
||||
PredCache.reset(new PredIteratorCache());
|
||||
return false;
|
||||
}
|
||||
|
@ -713,7 +713,7 @@ bool RAGreedy::addSplitConstraints(InterferenceCache::Cursor Intf,
|
||||
Intf.moveToBlock(BC.Number);
|
||||
BC.Entry = BI.LiveIn ? SpillPlacement::PrefReg : SpillPlacement::DontCare;
|
||||
BC.Exit = BI.LiveOut ? SpillPlacement::PrefReg : SpillPlacement::DontCare;
|
||||
BC.ChangesValue = BI.FirstDef;
|
||||
BC.ChangesValue = BI.FirstDef.isValid();
|
||||
|
||||
if (!Intf.hasInterference())
|
||||
continue;
|
||||
|
@ -65,7 +65,7 @@ unsigned SourceMgr::AddIncludeFile(const std::string &Filename,
|
||||
MemoryBuffer::getFile(IncludedFile.c_str(), NewBuf);
|
||||
}
|
||||
|
||||
if (NewBuf == 0) return ~0U;
|
||||
if (!NewBuf) return ~0U;
|
||||
|
||||
return AddNewSourceBuffer(NewBuf.take(), IncludeLoc);
|
||||
}
|
||||
|
@ -75,7 +75,7 @@ public:
|
||||
}
|
||||
|
||||
// True if Handle is valid.
|
||||
operator bool() const {
|
||||
LLVM_EXPLICIT operator bool() const {
|
||||
return HandleTraits::IsValid(Handle) ? true : false;
|
||||
}
|
||||
|
||||
|
@ -130,7 +130,7 @@ ReduceMiscompilingPasses::doTest(std::vector<std::string> &Prefix,
|
||||
//
|
||||
OwningPtr<Module> PrefixOutput(ParseInputFile(BitcodeResult,
|
||||
BD.getContext()));
|
||||
if (PrefixOutput == 0) {
|
||||
if (!PrefixOutput) {
|
||||
errs() << BD.getToolName() << ": Error reading bitcode file '"
|
||||
<< BitcodeResult << "'!\n";
|
||||
exit(1);
|
||||
|
@ -98,7 +98,7 @@ protected:
|
||||
|
||||
void compileAndRun(int ExpectedRC = OriginalRC) {
|
||||
// This function shouldn't be called until after SetUp.
|
||||
ASSERT_TRUE(0 != TheJIT);
|
||||
ASSERT_TRUE(TheJIT.isValid());
|
||||
ASSERT_TRUE(0 != Main);
|
||||
|
||||
TheJIT->finalizeObject();
|
||||
|
Loading…
Reference in New Issue
Block a user