diff options
author | David Blaikie <dblaikie@gmail.com> | 2014-05-05 23:23:53 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2014-05-05 23:23:53 +0000 |
commit | ef8a9518826b5b6b726eec66fd2fce6a3532ac66 (patch) | |
tree | 48fbf1a336caa4d475751f53550bbbc1dd46f386 /llvm/lib/MC/SubtargetFeature.cpp | |
parent | fc55cb6e1481980aa6dcfa8c72f79e461201085e (diff) | |
download | bcm5719-llvm-ef8a9518826b5b6b726eec66fd2fce6a3532ac66.tar.gz bcm5719-llvm-ef8a9518826b5b6b726eec66fd2fce6a3532ac66.zip |
Build debug info for ObjC interface types at the end of the translation unit to ensure all ivars are included.
This takes a different approach than the
completedType/requiresCompleteType work which relies on AST callbacks to
upgrade the type declaration to a definition. Instead, just defer
constructing the definition to the end of the translation unit.
This works because the definition is never needed by other debug info
(so far as I know), whereas the definition of a struct may be needed by
other debug info before the end of the translation unit (such as
emitting the definition of a member function which must refer to that
member function's declaration).
If we had a callback for whenever an IVar was added to an ObjC interface
we could use that, and remove the need for the ObjCInterfaceCache, which
might be nice. (also would need a callback for when it was more than
just a declaration so we could get properties, etc).
A side benefit is that we also don't need the CompletedTypeCache
anymore. Just rely on the declaration-ness of a type to decide whether
its definition is yet to be emitted.
There's still the PR19562 memory leak, but this should hopefully make
that a bit easier to approach.
llvm-svn: 208015
Diffstat (limited to 'llvm/lib/MC/SubtargetFeature.cpp')
0 files changed, 0 insertions, 0 deletions