diff options
author | Alon Zakai <alonzakai@gmail.com> | 2014-01-10 17:05:12 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2014-01-10 17:05:12 -0800 |
commit | 05c8cb0b74c925e11ca9c82e320d3adbb9122a5a (patch) | |
tree | 0e6e2688d4c58d4e5c77f024bceeaadd864f74b8 /lib/Target/JSBackend/JSBackend.cpp | |
parent | e81554b0f3bd55aa43fb0a811d6227f11cc7f7dc (diff) |
handle some [bitcast x] constants that can show up in landingpad inputs
Diffstat (limited to 'lib/Target/JSBackend/JSBackend.cpp')
-rw-r--r-- | lib/Target/JSBackend/JSBackend.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/lib/Target/JSBackend/JSBackend.cpp b/lib/Target/JSBackend/JSBackend.cpp index f5b6c56c6f..9ec4e64641 100644 --- a/lib/Target/JSBackend/JSBackend.cpp +++ b/lib/Target/JSBackend/JSBackend.cpp @@ -769,6 +769,14 @@ std::string JSWriter::getConstant(const Constant* CV, AsmCast sign) { getConstant(DV->getElementAsConstant(2)) + ',' + getConstant(DV->getElementAsConstant(3)) + ')'; } + } else if (const ConstantArray *CA = dyn_cast<const ConstantArray>(CV)) { + // handle things like [i8* bitcast (<{ i32, i32, i32 }>* @_ZTISt9bad_alloc to i8*)] which clang can emit for landingpads + assert(CA->getNumOperands() == 1); + CV = CA->getOperand(0); + if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(CV)) { + CV = CE->getOperand(0); // ignore bitcasts + } + return getConstant(CV, sign); } else { dumpIR(CV); assert(false); |