Skip to content
  • Douglas Gregor's avatar
    Introduce a new AST node describing reference binding to temporaries. · fe31481f
    Douglas Gregor authored
    MaterializeTemporaryExpr captures a reference binding to a temporary
    value, making explicit that the temporary value (a prvalue) needs to
    be materialized into memory so that its address can be used. The
    intended AST invariant here is that a reference will always bind to a
    glvalue, and MaterializeTemporaryExpr will be used to convert prvalues
    into glvalues for that binding to happen. For example, given
    
      const int& r = 1.0;
    
    The initializer of "r" will be a MaterializeTemporaryExpr whose
    subexpression is an implicit conversion from the double literal "1.0"
    to an integer value. 
    
    IR generation benefits most from this new node, since it was
    previously guessing (badly) when to materialize temporaries for the
    purposes of reference binding. There are likely more refactoring and
    cleanups we could perform there, but the introduction of
    MaterializeTemporaryExpr fixes PR9565, a case where IR generation
    would effectively bind a const reference directly to a bitfield in a
    struct. Addresses <rdar://problem/9552231>.
    
    llvm-svn: 133521
    fe31481f
Loading