aboutsummaryrefslogtreecommitdiff
path: root/lib/Target/JSBackend/JSBackend.cpp
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2014-02-14 16:43:35 -0800
committerAlon Zakai <alonzakai@gmail.com>2014-02-14 16:43:35 -0800
commit4a3d6555bda9fde5dfa3b3189811c85924b447d2 (patch)
tree561977f3a25682761d16d4085111f899bb27a4b1 /lib/Target/JSBackend/JSBackend.cpp
parent161ef7e5f2bcd15754af0d25462107ac8ba2228d (diff)
emit an abort if calling an absolute address
Diffstat (limited to 'lib/Target/JSBackend/JSBackend.cpp')
-rw-r--r--lib/Target/JSBackend/JSBackend.cpp25
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;