diff options
author | Alon Zakai <alonzakai@gmail.com> | 2014-02-14 16:43:35 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2014-02-14 16:43:35 -0800 |
commit | 4a3d6555bda9fde5dfa3b3189811c85924b447d2 (patch) | |
tree | 561977f3a25682761d16d4085111f899bb27a4b1 /lib/Target/JSBackend/JSBackend.cpp | |
parent | 161ef7e5f2bcd15754af0d25462107ac8ba2228d (diff) |
emit an abort if calling an absolute address
Diffstat (limited to 'lib/Target/JSBackend/JSBackend.cpp')
-rw-r--r-- | lib/Target/JSBackend/JSBackend.cpp | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/lib/Target/JSBackend/JSBackend.cpp b/lib/Target/JSBackend/JSBackend.cpp index dc2404866a..97f4be7c92 100644 --- a/lib/Target/JSBackend/JSBackend.cpp +++ b/lib/Target/JSBackend/JSBackend.cpp @@ -302,6 +302,18 @@ namespace { return getGlobalAddress(V->getName().str()); } } + + // Test whether the given value is known to be an absolute value or one we turn into an absolute value + bool isAbsolute(const Value *P) { + if (const IntToPtrInst *ITP = dyn_cast<IntToPtrInst>(P)) { + return isa<ConstantInt>(ITP->getOperand(0)); + } + if (isa<ConstantPointerNull>(P) || isa<UndefValue>(P)) { + return true; + } + return false; + } + std::string getPtrAsStr(const Value* Ptr) { Ptr = Ptr->stripPointerCasts(); if (isa<const ConstantPointerNull>(Ptr) || isa<UndefValue>(Ptr)) return "0"; @@ -557,19 +569,6 @@ std::string JSWriter::getIMul(const Value *V1, const Value *V2) { return "Math_imul(" + getValueAsStr(V1) + ", " + getValueAsStr(V2) + ")|0"; // unknown or too large, emit imul } -// Test whether the given value is known to be a null pointer. -static bool isAbsolute(const Value *P) { - if (const IntToPtrInst *ITP = dyn_cast<IntToPtrInst>(P)) { - return isa<ConstantInt>(ITP->getOperand(0)); - } - - if (isa<ConstantPointerNull>(P)) { - return true; - } - - return false; -} - std::string JSWriter::getLoad(const Instruction *I, const Value *P, Type *T, unsigned Alignment, char sep) { std::string Assign = getAssign(getJSName(I), I->getType()); unsigned Bytes = T->getPrimitiveSizeInBits()/8; |