diff options
Diffstat (limited to 'lib/Target/CBackend/CBackend.cpp')
-rw-r--r-- | lib/Target/CBackend/CBackend.cpp | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/lib/Target/CBackend/CBackend.cpp b/lib/Target/CBackend/CBackend.cpp index 00b00ab9a8..5da8367a11 100644 --- a/lib/Target/CBackend/CBackend.cpp +++ b/lib/Target/CBackend/CBackend.cpp @@ -517,8 +517,19 @@ void CInstPrintVisitor::visitFreeInst(FreeInst *I) { void CInstPrintVisitor::printIndexingExpr(MemAccessInst *MAI) { CW.writeOperand(MAI->getPointerOperand()); - for (MemAccessInst::op_iterator I = MAI->idx_begin(), E = MAI->idx_end(); - I != E; ++I) + MemAccessInst::op_iterator I = MAI->idx_begin(), E = MAI->idx_end(); + if (I == E) return; + + // Print out the -> operator if possible... + Constant *CI = dyn_cast<Constant>(*I); + if (CI && CI->isNullValue() && I+1 != E && + (*(I+1))->getType() == Type::UByteTy) { + ++I; + Out << "->field" << cast<ConstantUInt>(*I)->getValue(); + ++I; + } + + for (; I != E; ++I) if ((*I)->getType() == Type::UIntTy) { Out << "["; CW.writeOperand(*I); |