[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