aboutsummaryrefslogtreecommitdiff
path: root/lib/Target/JSBackend/JSBackend.cpp
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2014-02-02 17:47:33 -0800
committerAlon Zakai <alonzakai@gmail.com>2014-02-02 18:00:23 -0800
commita1ab1a3c0fc16304c8e3b253703484cee575084a (patch)
tree794f445601432553036d805745f4a449edb95714 /lib/Target/JSBackend/JSBackend.cpp
parent91288b653d28c8fe4aeb69b06ce82d75646e72a7 (diff)
abort on loads from constant addresses in general, not just based on weird alignment
Diffstat (limited to 'lib/Target/JSBackend/JSBackend.cpp')
-rw-r--r--lib/Target/JSBackend/JSBackend.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/lib/Target/JSBackend/JSBackend.cpp b/lib/Target/JSBackend/JSBackend.cpp
index e7253115d4..8d85a89c6b 100644
--- a/lib/Target/JSBackend/JSBackend.cpp
+++ b/lib/Target/JSBackend/JSBackend.cpp
@@ -511,7 +511,10 @@ std::string JSWriter::getLoad(const std::string& Assign, const Value *P, const T
std::string text;
if (Bytes <= Alignment || Alignment == 0) {
text = Assign + getPtrLoad(P);
- if (Alignment == 536870912) text += "; abort() /* segfault */";
+ if (const IntToPtrInst *ITP = dyn_cast<IntToPtrInst>(P)) {
+ // loads from an absolute constants are either intentional segfaults (int x = *((int*)0)), or code problems
+ if (isa<ConstantInt>(ITP->getOperand(0))) text += "; abort() /* segfault, load from absolute addr */";
+ }
} else {
// unaligned in some manner
std::string PS = getOpName(P);