aboutsummaryrefslogtreecommitdiff
path: root/test/CodeGenCXX/c99-variable-length-array.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2010-05-22 05:17:18 +0000
committerDouglas Gregor <dgregor@apple.com>2010-05-22 05:17:18 +0000
commit2d6b0e94db30c0e2754d270753c6f75478e451bf (patch)
tree789d9601397ddcd59cd006e9e0c5cabfa5c2edc9 /test/CodeGenCXX/c99-variable-length-array.cpp
parent5e30b8bf56c41fcfec63ae82ddd461c99f3c4221 (diff)
Improve our handling of reference binding for subobjects of
temporaries. There are actually several interrelated fixes here: - When converting an object to a base class, it's only an lvalue cast when the original object was an lvalue and we aren't casting pointer-to-derived to pointer-to-base. Previously, we were misclassifying derived-to-base casts of class rvalues as lvalues, causing various oddities (including problems with reference binding not extending the lifetimes of some temporaries). - Teach the code for emitting a reference binding how to look through no-op casts and parentheses directly, since Expr::IgnoreParenNoOpCasts is just plain wrong for this. Also, make sure that we properly look through multiple levels of indirection from the temporary object, but destroy the actual temporary object; this fixes the reference-binding issue mentioned above. - Teach Objective-C message sends to bind the result as a temporary when needed. This is actually John's change, but it triggered the reference-binding problem above, so it's included here. Now John can actually test his return-slot improvements. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@104434 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGenCXX/c99-variable-length-array.cpp')
0 files changed, 0 insertions, 0 deletions