[cfe-commits] r133521 - in /cfe/trunk: include/clang/AST/ include/clang/Basic/ include/clang/Serialization/ lib/AST/ lib/Analysis/ lib/CodeGen/ lib/Sema/ lib/Serialization/ lib/StaticAnalyzer/Checkers/ lib/StaticAnalyzer/Core/ test/CodeGenCXX/ tools/libclang/

Douglas Gregor dgregor at apple.com
Tue Jun 21 11:28:16 PDT 2011


On Jun 21, 2011, at 10:27 AM, John McCall wrote:

> On Jun 21, 2011, at 10:03 AM, Douglas Gregor wrote:
>> +  /// \brief Determine whether this materialized temporary is bound to an
>> +  /// lvalue reference; otherwise, it's bound to an rvalue reference.
>> +  bool BoundToLvalueReference() const { 
>> +    return getValueKind() == VK_LValue;
>> +  }
>> +  
> 
> Maybe isBoundToLvalueReference, or at least IsBoundToLvalueReference?

Sure.

>> Modified: cfe/trunk/lib/AST/Decl.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Decl.cpp?rev=133521&r1=133520&r2=133521&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/AST/Decl.cpp (original)
>> +++ cfe/trunk/lib/AST/Decl.cpp Tue Jun 21 12:03:29 2011
>> @@ -1312,6 +1312,20 @@
>>  Init = I;
>> }
>> 
>> +bool VarDecl::extendsLifetimeOfTemporary() const {
>> +  if (!getType()->isReferenceType())
>> +    return false;
> 
> Could this be an assert?  Is there any good reason to support calling
> this method on variables not known to have reference type?

No, there's no good reason. assert()'d.

>> Modified: cfe/trunk/lib/AST/Expr.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Expr.cpp?rev=133521&r1=133520&r2=133521&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/AST/Expr.cpp (original)
>> +++ cfe/trunk/lib/AST/Expr.cpp Tue Jun 21 12:03:29 2011
>> @@ -1568,6 +1573,10 @@
>>    return (cast<ImplicitCastExpr>(this)
>>            ->getSubExpr()->isUnusedResultAWarning(Loc, R1, R2, Ctx));
>> 
>> +  case MaterializeTemporaryExprClass:
>> +    return cast<MaterializeTemporaryExpr>(this)->GetTemporaryExpr()
>> +                                    ->isUnusedResultAWarning(Loc, R1, R2, Ctx);
>> +      
> 
> Can this really ever happen?

Nope! Killed.

>> Modified: cfe/trunk/lib/CodeGen/CGExpr.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExpr.cpp?rev=133521&r1=133520&r2=133521&view=diff
>> ==============================================================================
>> @@ -2067,11 +2074,20 @@
>>  return getOpaqueLValueMapping(e);
>> }
>> 
>> +LValue CodeGenFunction::EmitMaterializeTemporaryExpr(
>> +                                           const MaterializeTemporaryExpr *E) {
>> +  RValue RV = EmitReferenceBindingToExpr(E->GetTemporaryExpr(),
>> +                                         /*InitializedDecl=*/0);
>> +  return LValue::MakeAddr(RV.getScalarVal(), E->getType(),
>> +                          CGM.getContext().getTypeAlign(E->getType()),
>> +                          CGM.getContext());
>> +}
> 
> Use CGF::MakeAddrLValue, please.


Ah, forgot about that one. 

Thanks for the review! Committed tweaks in r133528.

	- Doug



More information about the cfe-commits mailing list