Skip to content
Snippets Groups Projects
  • George Burgess IV's avatar
    75424358
    [CodeGen] Unique constant CompoundLiterals. · 75424358
    George Burgess IV authored
    Our newly aggressive constant folding logic makes it possible for
    CGExprConstant to see the same CompoundLiteralExpr more than once. So,
    emitting a new GlobalVariable every time we see a CompoundLiteral is no
    longer correct.
    
    We had a similar issue with BlockExprs that was caught while testing
    said aggressive folding, so I applied the same style of fix (see D26410)
    here. If we find yet another case where this needs to happen, we should
    probably refactor this so we don't have a third DenseMap+getter+setter.
    
    As a design note: getAddrOfConstantCompoundLiteralIfEmitted is really
    only intended to be called by ConstExprEmitter::EmitLValue. So,
    returning a GlobalVariable* instead of a ConstantAddress costs us
    effectively nothing, and saves us either a few bytes per entry in our
    map or a bit of code duplication.
    
    
    git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@290661 91177308-0d34-0410-b5e6-96231b3b80d8
    75424358
    History
    [CodeGen] Unique constant CompoundLiterals.
    George Burgess IV authored
    Our newly aggressive constant folding logic makes it possible for
    CGExprConstant to see the same CompoundLiteralExpr more than once. So,
    emitting a new GlobalVariable every time we see a CompoundLiteral is no
    longer correct.
    
    We had a similar issue with BlockExprs that was caught while testing
    said aggressive folding, so I applied the same style of fix (see D26410)
    here. If we find yet another case where this needs to happen, we should
    probably refactor this so we don't have a third DenseMap+getter+setter.
    
    As a design note: getAddrOfConstantCompoundLiteralIfEmitted is really
    only intended to be called by ConstExprEmitter::EmitLValue. So,
    returning a GlobalVariable* instead of a ConstantAddress costs us
    effectively nothing, and saves us either a few bytes per entry in our
    map or a bit of code duplication.
    
    
    git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@290661 91177308-0d34-0410-b5e6-96231b3b80d8
Code owners
Assign users and groups as approvers for specific file changes. Learn more.