Changes in directory llvm/include/llvm/Support:
PatternMatch.h updated: 1.18 -> 1.19 --- Log message: I love non-deturminism. Returning objects with references to stack objects is a bad idea (TM). --- Diffs of the changes: (+7 -5) PatternMatch.h | 12 +++++++----- 1 files changed, 7 insertions(+), 5 deletions(-) Index: llvm/include/llvm/Support/PatternMatch.h diff -u llvm/include/llvm/Support/PatternMatch.h:1.18 llvm/include/llvm/Support/PatternMatch.h:1.19 --- llvm/include/llvm/Support/PatternMatch.h:1.18 Thu Feb 1 20:16:21 2007 +++ llvm/include/llvm/Support/PatternMatch.h Mon Feb 12 18:37:50 2007 @@ -223,19 +223,22 @@ template<typename LHS_t, typename RHS_t, typename Class, typename OpcType> struct BinaryOpClass_match { - OpcType &Opcode; + OpcType *Opcode; LHS_t L; RHS_t R; BinaryOpClass_match(OpcType &Op, const LHS_t &LHS, const RHS_t &RHS) - : Opcode(Op), L(LHS), R(RHS) {} + : Opcode(&Op), L(LHS), R(RHS) {} + BinaryOpClass_match(const LHS_t &LHS, const RHS_t &RHS) + : Opcode(0), L(LHS), R(RHS) {} template<typename OpTy> bool match(OpTy *V) { if (Class *I = dyn_cast<Class>(V)) if (L.match(I->getOperand(0)) && R.match(I->getOperand(1))) { - Opcode = I->getOpcode(); + if (Opcode) + *Opcode = I->getOpcode(); return true; } #if 0 // Doesn't handle constantexprs yet! @@ -257,9 +260,8 @@ template<typename LHS, typename RHS> inline BinaryOpClass_match<LHS, RHS, BinaryOperator, Instruction::BinaryOps> m_Shift(const LHS &L, const RHS &R) { - Instruction::BinaryOps Op; return BinaryOpClass_match<LHS, RHS, - BinaryOperator, Instruction::BinaryOps>(Op, L, R); + BinaryOperator, Instruction::BinaryOps>(L, R); } //===----------------------------------------------------------------------===// _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits