r176654 - Evaluate compound literals directly into the result aggregate

John McCall rjmccall at apple.com
Thu Mar 7 13:49:02 PST 2013


On Mar 7, 2013, at 1:42 PM, Benjamin Kramer <benny.kra at gmail.com> wrote:
> On 07.03.2013, at 22:36, John McCall <rjmccall at apple.com> wrote:
>> Author: rjmccall
>> Date: Thu Mar  7 15:36:54 2013
>> New Revision: 176654
>> 
>> URL: http://llvm.org/viewvc/llvm-project?rev=176654&view=rev
>> Log:
>> Evaluate compound literals directly into the result aggregate
>> when that aggregate isn't potentially aliased.
>> 
>> Modified:
>>   cfe/trunk/lib/CodeGen/CGExprAgg.cpp
>>   cfe/trunk/test/CodeGen/compound-literal.c
>> 
>> Modified: cfe/trunk/lib/CodeGen/CGExprAgg.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprAgg.cpp?rev=176654&r1=176653&r2=176654&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/CodeGen/CGExprAgg.cpp (original)
>> +++ cfe/trunk/lib/CodeGen/CGExprAgg.cpp Thu Mar  7 15:36:54 2013
>> @@ -531,12 +531,10 @@ void AggExprEmitter::VisitOpaqueValueExp
>> 
>> void
>> AggExprEmitter::VisitCompoundLiteralExpr(CompoundLiteralExpr *E) {
>> -  if (E->getType().isPODType(CGF.getContext())) {
>> +  if (Dest.isPotentiallyAliased() &&
>> +      E->getType().isPODType(CGF.getContext())) {
> 
> Does this really depend on the C++ version in use or could it always use the more lenient C++11 definition of POD?

The check was originally intended to be more about trivial copyability, I think.  I was thinking about this when I made the patch, and the type part of the check should probably just be removed — none of the C++ cases where it's important not to assume trivial copyability should be setting the "potentially aliased" flag.  I didn't really want to do that investigation at the time, though.

John.



More information about the cfe-commits mailing list