Commit Graph

1260 Commits

Author SHA1 Message Date
David Blaikie afc3c5a179 PR16091 continued: Debug Info for member functions with undeduced return types.
So DWARF5 specs out auto deduced return types as DW_TAG_unspecified_type
with DW_AT_name "auto", and GCC implements this somewhat, but it
presents a few problems to do this with Clang.

GCC's implementation only applies to member functions where the auto
return type isn't deduced immediately (ie: member functions of templates
or member functions defined out of line). In the common case of an
inline deduced return type function, GCC emits the DW_AT_type as the
deduced return type.

Currently GDB doesn't seem to behave too well with this debug info - it
treats the return type as 'void', even though the definition of the
function has the correctly deduced return type (I guess it sees the
return type the declaration has, doesn't understand it, and assumes
void). This means the function's ABI might be broken (non-trivial return
types, etc), etc.

Clang, on the other hand doesn't track this particular case of a
deducable return type that is deduced immediately versus one that is
deduced 'later'. So if we implement the DWARF5 representation, all
deducible return type functions would get adverse GDB behavior
(including deduced return type lambda functions, inline deduced return
type functions, etc).

Also, we can't just do this for auto types that are not deduced -
because Clang marks even the declaration's return type as deduced (&
provides the underlying type) once a definition is seen that allows the
deduction. So we have to ignore even deduced types - but we can't do
that for auto variables (because this representation only applies to
function declarations - variables and function definitions need the real
type so the function can be called, etc) so we'd need to add an extra
flag to the type unwrapping/creation code to indicate when we want to
see through deduced types and when we don't. It's also not as simple as
just checking at the top level when building a function type (for one
thing, we reuse the function type building for building function pointer
types which might also have 'auto' in them - but be the type of a
variable instead) because the auto might be arbitrarily deeply nested
("auto &", "auto (*)()", etc...)

So, with all that said, let's do the simple thing that works in existing
debuggers for now and treat these functions the same way we do function
templates and implicit special members: omit them from the member list,
since they can't be correctly called anyway (without knowing the return
type the ABI isn't know and a function call could put the arguments in
the wrong place) so they're not much use to the user.

At some point in the future, when GDB understands the DWARF5
representation better it might be worth plumbing through the extra type
builder handling to avoid looking through AutoType for some callers,
etc...

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@221704 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-11 20:44:45 +00:00
Frederic Riss b18ef04878 Return a DIDescriptor from CGDebugInfo::getDeclarationOrDefinition...
... instead of a DIScope that might wrap something that's not actually
a DIScope (eg. a DIGlobalVariable);

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@221481 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-06 21:12:06 +00:00
Frederic Riss 86751f338d [DebugInfo] Do not record artificial global initializer functions in the DeclCache.
When we are generating the global initializer functions, we call
CGDebugInfo::EmitFunctionStart() with a valid decl which is describing
the initialized global variable. Do not update the DeclCache with this
key as it will overwrite the the cached variable DIGlobalVariable with
the newly created artificial DISubprogram.

One could wonder if we should put artificial subprograms in the DIE tree
at all (there are vaild uses for them carrying line information though).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@221385 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-05 19:19:04 +00:00
Adrian Prantl f65002072f Debug info: Emit the correct type for the __FuncPtr field in a block
descriptor.

rdar://problem/15984431

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@221326 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-05 01:01:30 +00:00
Eric Christopher ef05fdb464 Fix 80-column and other odd formatting.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@220659 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-26 23:40:33 +00:00
David Majnemer 4448622409 CodeGen: GLValue exprs in template parameters should have reference type
This fixes a corner-case where __uuidof as a template argument would
result in us trying to emit a GLValue as an RValue.  This would lead to
a crash down the road.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@220585 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-24 19:49:04 +00:00
David Blaikie c7fcc10974 DebugInfo: Correctly describe the lexical decl context of static member variable definitions.
The previous IR representation used the non-lexical decl context, which
placed the definitions in the same scope as the declarations (ie: within
the class) - this was hidden by the fact that LLVM currently doesn't
respect the context of global variable definitions at all, and always
puts them at the top level (as direct children of the compile_unit).
Having the correct lexical scope improves source fidelity and simplify
backend global variable emission (with changes coming shortly).

Doing something similar for non-member global variables would help
simplify/cleanup things further (see FIXME in the commit) and provide
similar source fidelity benefits to the final debug info.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@220488 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-23 16:39:49 +00:00
David Blaikie 8387021d21 DebugInfo: Omit scopes in -gmlt to reduce metadata size (on disk and in memory)
I haven't done any actual impact analysis of this change as it's a
strict improvement, but I'd be curious to know how much it helps.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@220408 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-22 19:34:33 +00:00
David Blaikie ed84178b85 Fix whitespace introduced in r220221
Post commit review feedback from Yaron Keren.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@220229 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-20 20:29:35 +00:00
David Blaikie ae27cbde0f PR21312: Fix a regression in non-type template parameters of function type that are static member functions.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@220221 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-20 18:56:54 +00:00
David Blaikie e169d666c9 Fix indentation.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@220216 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-20 17:42:23 +00:00
David Blaikie df77101cd0 PR21305: Typedefs in non-type template parameters in member data pointers.
Patch by Stephen Crane!

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@220122 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-18 02:21:26 +00:00
David Blaikie 3436439233 Rename TemplateArgument::getTypeForDecl to getParamTypeForDecl for clarity
Code review feedback from Richard Smith on r219900.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@220060 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-17 18:00:12 +00:00
David Blaikie 3b32ee4d36 PR21246: DebugInfo: Emit the appropriate type (cv qualifiers, reference-ness, etc) for non-type template parameters
Plumb through the full QualType of the TemplateArgument::Declaration, as
it's insufficient to only know whether the type is a reference or
pointer (that was necessary for mangling, but insufficient for debug
info). This shouldn't increase the size of TemplateArgument as
TemplateArgument::Integer is still longer by another 32 bits.

Several bits of code were testing that the reference-ness of the
parameters matched, but this seemed to be insufficient (various other
features of the type could've mismatched and wouldn't've been caught)
and unnecessary, at least insofar as removing those tests didn't cause
anything to fail.

(Richard - perchaps you can hypothesize why any of these checks might
need to test reference-ness of the parameters (& explain why
reference-ness is part of the mangling - I would've figured that for the
reference-ness to be different, a prior template argument would have to
be different). I'd be happy to add them in/beef them up and add test
cases if there's a reason for them)

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@219900 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-16 04:21:25 +00:00
David Blaikie 25ae67622c DebugInfo: Lazily built static member variable declarations should use the canonical declaration for line/file information.
When lazily constructing static member variable declarations (when
the vtable optimization fires and the definition of the type is omitted
(or built later, lazily), but the out of line definition of the static
member is provided and must be described in debug info) ensure we use
the canonical declaration when computing the file, line, etc for that
declaration (rather than the definition, which is also a declaration,
but not the canonical one).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@219736 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-14 22:22:17 +00:00
Aaron Ballman eca23c650c Using an explicit cast to work around MSVC 2013 not picking the conversion operator as expected. NFC, should fix the MSVC build bots.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@219116 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-06 12:42:31 +00:00
David Blaikie 4095bfe6a3 Add FIXME/notes to the future.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@219104 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-06 05:52:27 +00:00
David Blaikie e8077752f6 DebugInfo: Don't include implicit special members in the list of class members
By leaving these members out of the member list, we avoid them being
emitted into type unit definitions - while still allowing the
definition/declaration to be injected into the compile unit as expected.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@219101 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-06 05:18:55 +00:00
David Blaikie 98ca94018c DebugInfo: Don't include member function template specializations in the list of class members
By leaving these members out of the member list, we avoid them being
emitted into type unit definitions - while still allowing the
definition/declaration to be injected into the compile unit as expected.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@219100 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-06 05:06:54 +00:00
Duncan P. N. Exon Smith facc757e69 DIBuilder: Encapsulate DIExpression's element type
Update for corresponding LLVM API change for
`DIBuilder::createExpression()`.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@218798 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-01 20:26:18 +00:00
Adrian Prantl 156ce8d03e Update CGDebugInfo to the updated API in LLVM.
Complex address expressions are no longer part of DIVariable, but
rather an extra argument to the debug intrinsics.

http://reviews.llvm.org/D4919
rdar://problem/17994491

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@218788 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-01 18:55:34 +00:00
Adrian Prantl efb1963749 Reverting r218777 while investigating buildbot breakage.
"Update CGDebugInfo to the updated API in LLVM."

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@218781 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-01 18:10:14 +00:00
Adrian Prantl 9fb397c03c Update CGDebugInfo to the updated API in LLVM.
Complex address expressions are no longer part of DIVariable, but
rather an extra argument to the debug intrinsics.

http://reviews.llvm.org/D4919
rdar://problem/17994491

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@218777 91177308-0d34-0410-b5e6-96231b3b80d8
2014-10-01 17:55:09 +00:00
Jyoti Allur dff837f3c8 Remove dead code from DIBuilder
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@218593 91177308-0d34-0410-b5e6-96231b3b80d8
2014-09-29 06:32:54 +00:00
David Blaikie 4ddefda796 Include debug info for types referenced only via explicit cast expressions.
Most of the debug info emission is powered essentially from function
definitions - if we emit the definition of a function, we emit the types
of its parameters, the members of those types, and so on and so forth.

For types that aren't referenced even indirectly due to this - because
they only appear in temporary expressions, not in any named variable, we
need to explicitly emit/add them as is done here. This is not the only
case of such code, and we might want to consider handling "void
func(void*); ... func(new T());" (currently debug info for T is not
emitted) at some point, though GCC doesn't. There's a much broader
solution to these issues, but it's a lot of work for possibly marginal
gain (but might help us improve the default -fno-standalone-debug
behavior to be even more aggressive in some places). See the original
review thread for more details.

Patch by jyoti allur (jyoti.yalamanchili@gmail.com)!

Differential Revision: http://reviews.llvm.org/D2498

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@218390 91177308-0d34-0410-b5e6-96231b3b80d8
2014-09-24 17:01:27 +00:00
Adrian Prantl bfb9ad3031 Debug info: Only emit C++ accessibility specifiers when they are diverging
from the default for the containing type.

rdar://problem/18154959

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@216800 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-29 22:44:27 +00:00
Alexey Bataev 51be7a6a02 [C++11] Support for capturing of variable length arrays in lambda expression.
Differential Revision: http://reviews.llvm.org/D4368


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@216649 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-28 04:28:19 +00:00
David Blaikie 71f992a695 Update for LLVM API change to remove discriminator tracking from DILexicalBlock (in favor of DILexicalBlockFile - where a default arg is used to avoid the need for API churn of those callers)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@216240 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-21 22:46:45 +00:00
Frederic Riss 4aeb30d14a Debuginfo: Correctly tag variadic ObjC methods with DW_TAG_unspecified_parameter.
Fixes rdar://13690847

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@215423 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-12 04:42:23 +00:00
David Blaikie 55a1129d85 DebugInfo: Blocks: Do not depend on LLVM argument numbering when choosing the debug info argument numbering.
Due to the possible presence of return-by-out parameters, using the LLVM
argument number count when numbering debug info arguments can end up
off-by-one. This could produce two arguments with the same number, which
would in turn cause LLVM to emit only one of those arguments (whichever
it found last) or assert (r215157).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@215227 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-08 17:10:14 +00:00
Reid Kleckner 8bf63d9dda Debug info: Use the vbtable offset for virtual bases in the MS ABI
There are no vtable offset offsets in the MS ABI, but vbtable offsets
are analogous.  There are no consumers of this information yet, but at
least we don't crash now.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@215149 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-07 21:29:25 +00:00
Reid Kleckner 11511190b0 Revert "Debug info: Use record layout to find vbase offsets instead of vtables"
This reverts commit r215137.

This doesn't work at all, an offset-offset is probably different than an
offset.  I'm scared that this passed our normal test suite.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@215141 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-07 20:36:48 +00:00
Reid Kleckner 60a37d0ee8 Debug info: Use record layout to find vbase offsets instead of vtables
This fixes an assertion when generating full debug info in the MS ABI
for classes with virtual bases.

Fixes PR20579.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@215137 91177308-0d34-0410-b5e6-96231b3b80d8
2014-08-07 19:43:01 +00:00
David Majnemer 7c8f94e3d5 MS ABI: Consider alignment attributes on typedefs for layout
The MS ABI has a notion of 'required alignment' for fields; this
alignment supercedes pragma pack directives.

MSVC takes into account alignment attributes on typedefs when
determining whether or not a field has a certain required alignment.

Do the same in clang by tracking whether or not we saw such an attribute
when calculating the type's bitwidth and alignment.

This fixes PR20418.

Reviewers: rnk

Differential Revision: http://reviews.llvm.org/D4714

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@214274 91177308-0d34-0410-b5e6-96231b3b80d8
2014-07-30 01:30:47 +00:00
Manman Ren e0181c755f [Debug Info] add DISubroutineType and its creation takes DITypeArray.
This is the last patch to unique the type array of a subroutine type.
This is the paired commit with llvm r214132.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@214133 91177308-0d34-0410-b5e6-96231b3b80d8
2014-07-28 22:24:34 +00:00
Manman Ren 5b5ca53f88 [Debug Info] rename getTypeArray to getElements, setTypeArray to setArrays.
This is the paired commit with llvm r214112.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@214113 91177308-0d34-0410-b5e6-96231b3b80d8
2014-07-28 19:14:41 +00:00
Diego Novillo e8e398049c Add new debug kind LocTrackingOnly.
Summary:
This new debug emission kind supports emitting line location
information in all instructions, but stops code generation
from emitting debug info to the final output.

This mode is useful when the backend wants to track source
locations during code generation, but it does not want to
produce debug info. This is currently used by optimization
remarks (-Rpass, -Rpass-missed and -Rpass-analysis).

When one of the -Rpass flags is used, the front end will enable
location tracking, only if no other debug option is enabled.

To prevent debug information from being generated, a new debug
info kind LocTrackingOnly causes DIBuilder::createCompileUnit() to
not emit the llvm.dbg.cu annotation. This blocks final code generation
from generating debug info in the back end.

Depends on D4234.

Reviewers: echristo, dblaikie

Subscribers: cfe-commits

Differential Revision: http://reviews.llvm.org/D4235

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@211610 91177308-0d34-0410-b5e6-96231b3b80d8
2014-06-24 17:02:17 +00:00
Alexey Samsonov 6ea41c97e8 Delete apparently unused method
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@210047 91177308-0d34-0410-b5e6-96231b3b80d8
2014-06-02 21:05:54 +00:00
David Blaikie 2fd2096335 CGDebugInfo: Simplify/invert createLexicalBlock parameter construction.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@210033 91177308-0d34-0410-b5e6-96231b3b80d8
2014-06-02 16:32:05 +00:00
Craig Topper d1008e5c93 [C++11] Use 'nullptr'. CodeGen edition.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@209272 91177308-0d34-0410-b5e6-96231b3b80d8
2014-05-21 05:09:00 +00:00
David Blaikie dfb7a74bfe DebugInfo: Avoid creating DILexicalScopeFiles when the filename in the current scope has not changed.
This looks like the right way for this check to work, but there is
another semi-obvious bug, I would think: why is CurLoc not zero'd out
between functions? The possibility for it to bleed between them seems
problematic. (& indeed I caused tests to fail when I fixed this a
different way, by setting CurLoc to SourceLocation() and the end of
EmitFunctionEnd... )

The changes to debug-info-blocks.m are due to a mismatch between the
source manager's file naming and CGDebugInfo's default handling when no
-main-file-name is specified. This actually reveals somewhat of a bug in
the debug info when using source files from standard in, too. See the
comment in CGDebugInfo::CreateCompileUnit for more details.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@208742 91177308-0d34-0410-b5e6-96231b3b80d8
2014-05-14 00:29:00 +00:00
Benjamin Kramer 10ffef9f56 Decouple ExprCXX.h and DeclCXX.h and clean up includes a bit.
Required pulling LambdaExpr::Capture into its own header.
No functionality change.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@208470 91177308-0d34-0410-b5e6-96231b3b80d8
2014-05-10 16:31:55 +00:00
David Blaikie 16173fc9ba PR19562: Fix another temporary node leak in Clang debug info emission
While constructing ObjC Interface types we might create the declaration
of some normal C++ types, thus adding things to the ReplaceMap. Make
sure we process the ReplaceMap after the ObjC interfaces.

In theory we know at this point, since we're at the end of the TU, that
we won't be upgrading any declarations to definitions, so we could just
construct non-temporary nodes, but that would require extra state in
CGDebugInfo to conditionalize the creation of declaration nodes which
seems annoying/more work than is appropriate.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@208226 91177308-0d34-0410-b5e6-96231b3b80d8
2014-05-07 16:56:58 +00:00
Ed Maste 9af567f3f3 DebugInfo: Use enum instead of unsigned
This makes debuging DebugInfo generation with LLDB a little more pleasant.

Differential Revision: http://reviews.llvm.org/D3626


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@208203 91177308-0d34-0410-b5e6-96231b3b80d8
2014-05-07 12:49:30 +00:00
David Blaikie 941635575f PR19562: Fix memory leak when ObjC interface types cause the creation of further interfaces.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@208161 91177308-0d34-0410-b5e6-96231b3b80d8
2014-05-07 06:18:00 +00:00
David Blaikie 0cb2626cb5 Reapply: DebugInfo: Emit the definition of enums when the definition preceeds the declaration and initial use.
Reverting r208106 to reapply r208065 with a fix for the regression. The
issue was that the enum tried to be built even if the declaration hadn't
been constructed for debug info - presenting problems for enum templates
and typedefs of enums with names for linkage purposes.

Original commit message:

This regressed a little further 208055 though it was already a little
broken.

While the requiresCompleteType optimization should be implemented here.
Future (possibly near future) work.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@208114 91177308-0d34-0410-b5e6-96231b3b80d8
2014-05-06 18:35:21 +00:00
David Blaikie 8304a54201 Revert "DebugInfo: Emit the definition of enums when the definition preceeds the declaration and initial use."
This is breaking the compiler-rt build. Reverting while I
investigate/fix.

This reverts commit r208065.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@208106 91177308-0d34-0410-b5e6-96231b3b80d8
2014-05-06 17:02:15 +00:00
David Blaikie 945143441c DebugInfo: Emit the definition of enums when the definition preceeds the declaration and initial use.
This regressed a little further 208055 though it was already a little
broken.

While the requiresCompleteType optimization should be implemented here.
Future (possibly near future) work.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@208065 91177308-0d34-0410-b5e6-96231b3b80d8
2014-05-06 07:33:30 +00:00
David Blaikie 2115b66f41 PR19598: Ensure temporary metadata nodes used in debug info are destroyed.
CGDebugInfo and DIBuilder were lax in their handling of temporary
MDNodes. All temporary nodes need to be deleted, which means they need
to be RAUW'd with a permanent node. This was not happening.

To ensure this, leverage DIBuilder's new ability to create both
permanent and temporary declarations. Ensure all temporary declarations
are RAUW'd, even with itself. (DIDescriptor::RAUW handles the case where
it is replaced with itself and creates a new, duplicate permanent node
to replace itself with)

This means that all temporary declarations must be added to the
ReplacementMap even if they're never upgraded to definitions - so move
the point of insertion into the map to the point of creation of the
declarations.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@208055 91177308-0d34-0410-b5e6-96231b3b80d8
2014-05-06 03:42:01 +00:00
David Blaikie ba7ed349fb 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.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@208015 91177308-0d34-0410-b5e6-96231b3b80d8
2014-05-05 23:23:53 +00:00
David Blaikie 6197f101bd Simplify replacement map by avoiding duplicate values and ensuring the values it does contain are necessary.
Items were being redundantly added to the replacement map (both when the
declaration was created, and then again when its definition was
constructed) which caused extra handling to be required when walking the
map (as elements may've already been replaced due to prior entries). By
avoiding adding the duplicates, the checks in the replacement handling
can be replaced with assertions.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@208000 91177308-0d34-0410-b5e6-96231b3b80d8
2014-05-05 21:21:39 +00:00
David Blaikie 387e171138 PR19623: Support typedefs (and alias templates) of void.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@207781 91177308-0d34-0410-b5e6-96231b3b80d8
2014-05-01 18:25:19 +00:00
Chandler Carruth 13b8d7d39e [Modules] Remove the only use of the DEBUG(...) macro in the compiler
parts of Clang. I don't really have any opinion about whether using that
macro is good or bad, but its odd that this is the only one, and Eric
seemed happy with just nuking it for now.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@206806 91177308-0d34-0410-b5e6-96231b3b80d8
2014-04-21 22:32:54 +00:00
Adrian Prantl 7cf5edcb1e Further simplify r206430.
rdar://problem/16636569.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@206434 91177308-0d34-0410-b5e6-96231b3b80d8
2014-04-17 01:04:01 +00:00
Adrian Prantl 279cb3d7c6 Debug info: When collecting the parameters of C++ partial template
specializations collect all arguments and not just the ones from the
class template partial specialization from which this class template
specialization was instantiated. The debug info does not represent the
partial specialization otherwise and so specialized parameters would
go missing.

rdar://problem/16636569.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@206430 91177308-0d34-0410-b5e6-96231b3b80d8
2014-04-17 00:30:48 +00:00
Adrian Prantl 9a7c2b4dfa Debug info: (Bugfix) Make sure artificial functions like _GLOBAL__I_a
are not associated with any source lines.

Previously, if the Location of a Decl was empty, EmitFunctionStart would
just keep using CurLoc, which would sometimes be correct (e.g., thunks)
but in other cases would just point to a hilariously random location.

This patch fixes this by completely eliminating all uses of CurLoc from
EmitFunctionStart and rather have clients explicitly pass in a
SourceLocation for the function header and the function body.

rdar://problem/14985269

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@205999 91177308-0d34-0410-b5e6-96231b3b80d8
2014-04-10 23:21:53 +00:00
Eric Christopher 993b99c22e Add global static variables for anonymous union fields. This makes
sure that a debugger can find them when stepping through code,
for example from the included testcase:

   12     int test_it() {
   13       c = 1;
   14       d = 2;
-> 15       a = 4;
   16       return (c == 1);
   17     }
   18
(lldb) p a
(int) $0 = 2
(lldb) p c
(int) $1 = 2
(lldb) p d
(int) $2 = 2

and a, c, d are all part of the file static anonymous union:

static union {
  int c;
  int d;
  union {
    int a;
  };
  struct {
    int b;
  };
};

Fixes PR19221.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@205952 91177308-0d34-0410-b5e6-96231b3b80d8
2014-04-10 05:20:00 +00:00
David Blaikie 2b100157e4 DebugInfo: Support type alias templates
We already got the type alias correct (though I've included a test case
here) since Clang represents that like any other typedef - but type
alias templates weren't being handled.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@205691 91177308-0d34-0410-b5e6-96231b3b80d8
2014-04-06 17:14:06 +00:00
David Blaikie ffe00c3f35 DebugInfo: emit namespace aliases as named imported declarations instead of named imported entities
Apparently that's how DWARF4 suggests they be emitted. So let's do that.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@205686 91177308-0d34-0410-b5e6-96231b3b80d8
2014-04-06 06:30:03 +00:00
David Blaikie 98ebbb6f4e Reapply r205655, DebugInfo: Place global constants in their appropriate context.
This was reverted in 205664 and seems to be fixed by 205668... though
that may be more by accident than anything well founded.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@205669 91177308-0d34-0410-b5e6-96231b3b80d8
2014-04-05 07:46:57 +00:00
David Blaikie f4a3b2313e DebugInfo: Avoid emitting constnants for every use
While the folding set would deduplicate the nodes themselves and LLVM
would handle not emitting the same global twice, it still meant creating
a long/redundant list of global variables.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@205668 91177308-0d34-0410-b5e6-96231b3b80d8
2014-04-05 07:23:17 +00:00
David Blaikie 8458c2cf4c Revert "DebugInfo: Place global constants in their appropriate context."
This reverts commit r205655.

Breaks the compiler-rt build with an assertion failure in LLVM...
reverting while I investigate.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@205664 91177308-0d34-0410-b5e6-96231b3b80d8
2014-04-05 03:39:29 +00:00
David Blaikie f992790cdc DebugInfo: Place global constants in their appropriate context.
We also don't need to duplicate the name in the LinkageName field. Just
leave it empty.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@205655 91177308-0d34-0410-b5e6-96231b3b80d8
2014-04-04 23:16:44 +00:00
David Blaikie 531ba2d1b9 DebugInfo: PR19298: function local const variables duplicated in the root scope
See the comment for CodeGenFunction::tryEmitAsConstant that describes
how in some contexts (lambdas) we must not emit references to the
variable, but instead use the constant directly - because of this we end
up emitting a constant for the variable, as well as emitting the
variable itself.

Should we just skip putting the variable on the stack at all and omit
the debug info for the constant? It's not clear to me - what if the
address of the local is taken?

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@205651 91177308-0d34-0410-b5e6-96231b3b80d8
2014-04-04 20:56:17 +00:00
David Blaikie a423c1ba2f DebugInfo: Include default template arguments in template type names
This was committed 4 years ago in 108916 with insufficient testing to
explain why the "getTypeAsWritten" case was appropriate. Experience says
that it isn't - the presence or absence of an explicit instantiation
declaration was causing this code to generate either i<int> or i<int,
int>.

That didn't seem to be a useful distinction, and omitting the template
arguments was destructive to debuggers being able to associate the two
types across translation units or across compilers (GCC, reasonably,
never omitted the arguments).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@205447 91177308-0d34-0410-b5e6-96231b3b80d8
2014-04-02 18:21:09 +00:00
Eric Christopher 059271f628 Partially revert r204517 and fix a different way:
We don't want to encourage the code to emit a lexical block for
a function that needs one in order for the line table to change,
we need to grab the line information from the body of the pattern
that we were instantiated from, this code should do that.

Modify the test case to ensure that we're still looking in the
right place for all of the scopes and also that we haven't
created a lexical block where we didn't need one.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@205368 91177308-0d34-0410-b5e6-96231b3b80d8
2014-04-01 22:25:28 +00:00
Adrian Prantl 96365aef99 Debug info: fix a crash when emitting IndirectFieldDecls, which were
previously not handled at all.
rdar://problem/16348575

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@205331 91177308-0d34-0410-b5e6-96231b3b80d8
2014-04-01 17:52:06 +00:00
Adrian Prantl 99834003cd Adapt CGDebugInfo to interface changes in DIBuilder/DIImportedEntity.
The Decl field in a DIImportedEntity is now a DIRef.
Paired commit with LLVM.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@205278 91177308-0d34-0410-b5e6-96231b3b80d8
2014-04-01 03:41:01 +00:00
Eric Christopher af3ef97286 Add an explanatory comment and FIXME about the function declaration
for a subprogram DIE.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@204949 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-27 18:50:35 +00:00
Eric Christopher eb0693fd60 Revert "Just call getContextDescriptor to get the context for subprograms"
while I investigate as it seems to be causing issues with the gdb bot.

This reverts commit r204874.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@204896 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-27 05:29:34 +00:00
Eric Christopher 55b2d89ef0 Just call getContextDescriptor to get the context for subprograms
instead of rolling an inefficient version of the function. This
changes some order of emission of metadata nodes, fix up those
testcases and make them more flexible to some changes.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@204874 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-26 23:09:30 +00:00
Adrian Prantl 631b3bcb22 CGDebugInfo: At the end of EmitFunctionStart, Initialize PrevLoc to the
location that the next call emitLocation() would default to. Otherwise
setLocation() may wrongly believe that the current source file didn't
change, when in fact it did.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@204517 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-21 21:01:58 +00:00
Aaron Ballman 6440fd7553 [C++11] Replacing BlockDecl iterators capture_begin() and capture_end() with iterator_range captures(). Updating all of the usages of the iterators with range-based for loops.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@203958 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-14 18:34:04 +00:00
Aaron Ballman 8d16b0cd8c [C++11] Replacing FunctionTemplateDecl iterators spec_begin() and spec_end() with iterator_range specializations(). Updating all of the usages of the iterators with range-based for loops.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@203938 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-14 16:05:56 +00:00
Aaron Ballman f5244d23c9 Renaming the recently-created (r203830) props() range API to properties() for clarity.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@203835 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-13 19:11:50 +00:00
Aaron Ballman fc41e95ace [C++11] Replacing ObjCContainerDecl iterators prop_begin() and prop_end() with iterator_range props(). Updating all of the usages of the iterators with range-based for loops.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@203830 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-13 18:47:37 +00:00
Aaron Ballman 7191c6b061 [C++11] Replacing CXXRecordDecl iterators bases_begin() and bases_end() with iterator_range bases(). Updating all of the usages of the iterators with range-based for loops.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@203803 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-13 15:41:46 +00:00
Aaron Ballman 8328f6462b [C++11] Replacing RecordDecl iterators field_begin() and field_end() with iterator_range fields(). Updating all of the usages of the iterators with range-based for loops.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@203355 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-08 20:12:42 +00:00
Aaron Ballman 0ce08a0739 [C++11] Replacing EnumDecl iterators enumerator_begin() and enumerator_end() with iterator_range enumerators(). Updating all of the usages of the iterators with range-based for loops.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@203353 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-08 18:45:14 +00:00
Aaron Ballman caabaa8e4b [C++11] Replacing DeclBase iterators decls_begin() and decls_end() with iterator_range decls(). The same is true for the noload versions of these APIs. Updating all of the usages of the iterators with range-based for loops.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@203278 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-07 19:56:05 +00:00
Aaron Ballman ecb8277062 [C++11] Replacing ObjCMethodDecl iterators param_begin() and param_end() with iterator_range params(). Updating all of the usages of the iterators with range-based for loops.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@203255 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-07 17:50:17 +00:00
Aaron Ballman ed65ea2738 [C++11] Replacing iterators redecls_begin() and redecls_end() with iterator_range redecls(). Updating all of the usages of the iterators with range-based for loops, which allows the begin/end forms to be removed entirely.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@203179 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-06 23:45:36 +00:00
David Blaikie 49655e6ef1 DebugInfo: Refix r202888 (a fix to r202769) in a different way, ensuring types aren't needlessly built during -gmlt
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@202900 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-04 22:01:08 +00:00
Reid Kleckner c4030638e6 Fix unconditional dereference of a WeakVH in CGDebugInfo TypeCache
This fails an "isa<> used with null pointer" assert during a clang-cl
self-host on Windows.  This was caused by r202769, and I'm currently
reducing a test case.

Reviewers: dblaikie

Differential Revision: http://llvm-reviews.chandlerc.com/D2944

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@202888 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-04 20:51:58 +00:00
David Blaikie 9db62af77a DebugInfo: Improvements/corrections to conservative emission of types in explicit template instantiation declarations
* detect out of line definitions correctly
* detect member function explicit specializations correctly

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@202779 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-04 03:08:14 +00:00
David Blaikie b6b2402646 DebugInfo: Emit only the declaration of a class template that has an explicit instantiation declaration (& always emit such a type when there's an explicit instantiation definition)
We should only have this optimization fire when the explicit
instantiation definition would cause at  least one member function to be
emitted, thus ensuring that even a compiler not performing this
optimization would still emit the full type information elsewhere.

But we should also pessimize output still by always emitting the
definition when the explicit instantiation definition appears so that at
some point in the future we can depend on that information even when no
code had to be emitted in that TU. (this shouldn't happen very often,
since people mostly use explicit spec decl/defs to reduce code size -
but perhaps one day they could use it to explicitly reduce debug info
size too)

This was worth about 2% for Clang and LLVM - so not a huge win, but a
win. It looks really great for simple STL programs (include <string> and
just declare a string - 14k -> 1.4k of .dwo)

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@202769 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-03 23:48:23 +00:00
Diego Novillo c0e55cd404 Update call DIBuilder::createLexicalBlock.
Create lexical blocks with discriminator value 0 by default.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@202737 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-03 18:53:32 +00:00
Benjamin Kramer ba9fd9e97e [C++11] Replace llvm::tie with std::tie.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@202639 91177308-0d34-0410-b5e6-96231b3b80d8
2014-03-02 13:01:17 +00:00
Eric Christopher 78a46668f0 Pass down the debug emission kind into the compile unit for code
generation purposes.
Paired with a commit to llvm.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@202334 91177308-0d34-0410-b5e6-96231b3b80d8
2014-02-27 01:25:08 +00:00
Eric Christopher 08e49feb9c 80-col and bad line ending fixups.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@202219 91177308-0d34-0410-b5e6-96231b3b80d8
2014-02-26 02:49:36 +00:00
Adrian Prantl 23eb673334 Address review comments for r202185, no functionality changes.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@202208 91177308-0d34-0410-b5e6-96231b3b80d8
2014-02-25 23:42:18 +00:00
Adrian Prantl 1741d118bf Debug info: Generate debug info for variadic functions.
Paired commit with LLVM.

rdar://problem/13690847

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@202185 91177308-0d34-0410-b5e6-96231b3b80d8
2014-02-25 19:38:11 +00:00
David Blaikie 16e54606c0 DebugInfo: Avoid unnecessarily looking up the context when the declaration is already built.
No functional change intended.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@201602 91177308-0d34-0410-b5e6-96231b3b80d8
2014-02-18 20:52:05 +00:00
Adrian Prantl e4fc27fce5 Debug info: fix a crasher when when emitting debug info for
not-yet-completed templated types. getTypeSize() needs a complete type.

rdar://problem/15931354

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@200797 91177308-0d34-0410-b5e6-96231b3b80d8
2014-02-04 21:29:50 +00:00
Alp Toker 37545f747c Rename getResultType() on function and method declarations to getReturnType()
A return type is the declared or deduced part of the function type specified in
the declaration.

A result type is the (potentially adjusted) type of the value of an expression
that calls the function.

Rule of thumb:

  * Declarations have return types and parameters.
  * Expressions have result types and arguments.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@200082 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-25 16:55:45 +00:00
Adrian Prantl aeff128ac7 Debug info: use the file a typedef is defined in as its decl_file instead
of the current compilation unit.
As a side effect this enables many more LTO uniquing opportunities.

This reapplies r199757 with a better testcase.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199760 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-21 18:42:27 +00:00
Adrian Prantl 0627310f5d revert 199757 for buildbot breakage.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199758 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-21 18:23:43 +00:00
Adrian Prantl 5f7dfbf84a Debug info: use the file a typedef is defined in as its decl_file instead
of the current compilation unit.
As a side effect this enables many more LTO uniquing opportunities.

rdar://problem/15851206

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199757 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-21 18:20:52 +00:00
Alp Toker c50bf3d128 Rename FunctionProtoType accessors from 'arguments' to 'parameters'
Fix a perennial source of confusion in the clang type system: Declarations and
function prototypes have parameters to which arguments are supplied, so calling
these 'arguments' was a stretch even in C mode, let alone C++ where default
arguments, templates and overloading make the distinction important to get
right.

Readability win across the board, especially in the casting, ADL and
overloading implementations which make a lot more sense at a glance now.

Will keep an eye on the builders and update dependent projects shortly.

No functional change.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199686 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-20 20:26:09 +00:00
Adrian Prantl 7095c767d4 Debug info: Refactor NoLocation and ArtificialLocation to use a common base
class and use it pervasively to restore debug locations.
Fixes an interaction between cleanup and EH that caused the location
to not be restored properly after emitting a landing pad.
rdar://problem/15208190

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@199444 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-17 00:15:10 +00:00
Adrian Prantl da45f59bdf Revert "Debug info: Ensure that the last stop point in a function is still within"
This reverts commit r198461.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@198714 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-07 22:05:52 +00:00
Adrian Prantl b9b5b2ce07 Revert "Debug info: Implement a cleaner version of r198461. For symmetry with"
This reverts commit 198699 so we can get a cleaner patch.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@198713 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-07 22:05:45 +00:00
Adrian Prantl 292f579c87 Debug info: Implement a cleaner version of r198461. For symmetry with
C and C++ don't emit an extra lexical scope for the compound statement
that is the body of an Objective-C method.

rdar://problem/15010825

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@198699 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-07 19:24:24 +00:00
Adrian Prantl 86d3c1cb65 update comment.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@198670 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-07 02:40:59 +00:00
Adrian Prantl c447571050 Implement a new -fstandalone-debug option. rdar://problem/15685848
It controls everything that -flimit-debug-info used to, plus the
vtable type optimization. The old -fno-limit-debug-info option is now an
alias to -fstandalone-debug and vice versa.

Standalone is the default on Darwin until dtrace is updated to work with
non-standalone debug info (rdar://problem/15758808).

Note: I kept the LimitedDebugInfo name in CodeGenOptions::DebugInfoKind
because NoStandaloneDebugInfo sounded even more confusing.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@198655 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-07 01:19:08 +00:00
Adrian Prantl d22d777d6d Debug info: Ensure that the last stop point in a function is still within
the lexical block formed by the compound statement that is the function
body.

rdar://problem/15010825

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@198461 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-03 23:34:30 +00:00
Adrian Prantl eab7314c99 remove dead code.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@197916 91177308-0d34-0410-b5e6-96231b3b80d8
2013-12-23 19:10:57 +00:00
David Blaikie ba52d9d455 DebugInfo: Do not include implicit members (implicit special members, template instantiations, etc) in the list of members of a structure.
These members will still be lazily added to the relevant DWARF DIEs in
LLVM but when enumerating the members they will not appear. This allows
DWARF type units to be more consistent - the type unit will never
contain these special members (so all instances of the type should have
the same DIEs without some having some special members and others having
others) and the special members will be added to the skeletal
declaration that appears in the relevant compile_unit.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@197844 91177308-0d34-0410-b5e6-96231b3b80d8
2013-12-20 23:19:47 +00:00
Adrian Prantl 1e41456b13 Debug info: (Bugfix) emit CRV qualifiers for pointers to member functions.
rdar://problem/15678916.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@197641 91177308-0d34-0410-b5e6-96231b3b80d8
2013-12-19 01:38:47 +00:00
Adrian Prantl 9e18818e48 Debug info: Implement (rvalue) reference qualifiers for C++11 non-static
member functions. Paired commit with LLVM.

rdar://problem/15356637

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@197612 91177308-0d34-0410-b5e6-96231b3b80d8
2013-12-18 21:48:18 +00:00
Alp Toker 2b01e1e26d Correct hyphenations in comments and assert messages
This patch tries to avoid unrelated changes other than fixing a few
hyphen-related ambiguities in nearby lines.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@196466 91177308-0d34-0410-b5e6-96231b3b80d8
2013-12-05 04:47:09 +00:00
Reid Kleckner 8e77b2bb5a Add an AdjustedType sugar node for adjusting calling conventions
Summary:
In general, this type node can be used to represent any type adjustment
that occurs implicitly without losing type sugar.  The immediate use of
this is to adjust the calling conventions of member function pointer
types without breaking template instantiation.

Fixes PR17996.

Reviewers: rsmith

Differential Revision: http://llvm-reviews.chandlerc.com/D2332

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@196451 91177308-0d34-0410-b5e6-96231b3b80d8
2013-12-05 01:23:43 +00:00
David Blaikie 96b7bd42f8 DebugInfo: Update caller based on DIType's MDNode* ctor becoming explicit in r195055.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@195056 91177308-0d34-0410-b5e6-96231b3b80d8
2013-11-18 23:38:26 +00:00
Timur Iskhodzhanov 5f0db58707 Fix vbtable indices when a class shares the vbptr with a non-virtual base
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@194082 91177308-0d34-0410-b5e6-96231b3b80d8
2013-11-05 15:54:58 +00:00
Yaron Keren 921ac4d6df Fix string assignment, David Blaikie suggestion.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@193116 91177308-0d34-0410-b5e6-96231b3b80d8
2013-10-21 20:07:37 +00:00
Eric Christopher 2e3fd942b6 Add the context that a function was created in as the context for the
function, not the context of the context.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@192862 91177308-0d34-0410-b5e6-96231b3b80d8
2013-10-17 01:31:21 +00:00
Eric Christopher 89fecb5195 Reflow slightly.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@192736 91177308-0d34-0410-b5e6-96231b3b80d8
2013-10-15 21:22:34 +00:00
Eric Christopher d6b52974a7 Remove extra braces.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@192473 91177308-0d34-0410-b5e6-96231b3b80d8
2013-10-11 18:16:51 +00:00
Timur Iskhodzhanov a53d7a0259 Abstract out the emission of vtables, add basic support for vtable emission when using -cxx-abi microsoft
Reviewed at http://llvm-reviews.chandlerc.com/D1532

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@191523 91177308-0d34-0410-b5e6-96231b3b80d8
2013-09-27 14:48:01 +00:00
Adrian Prantl 35969ea5c5 Debug info: Fix a crash when trying to construct a type with redundant
ownership qualifiers.
Fixes rdar://problem/14990656.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@191463 91177308-0d34-0410-b5e6-96231b3b80d8
2013-09-26 21:35:50 +00:00
Adrian Prantl 39232cd098 get rid of extra parentheses.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@190962 91177308-0d34-0410-b5e6-96231b3b80d8
2013-09-18 22:18:17 +00:00
Adrian Prantl 95d3d1a9b2 Debug info: Explicitly set the DIVariable::isIndirect() flag for VLAs.
This allows us to get rid of an ugly hack in the backend.
Paired commit with LLVM.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@190960 91177308-0d34-0410-b5e6-96231b3b80d8
2013-09-18 22:08:57 +00:00
David Blaikie 8b6aaa975f DebugInfo: omit debug info for friends
GCC ToT doesn't do this & it's worth about 3.2% on Clang's DWO file size
with Clang. Some or all of this may be due to things like r190715 which
could have source fixes/improvements, but it's not clear that's the case
and that doesn't help other source bases.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@190716 91177308-0d34-0410-b5e6-96231b3b80d8
2013-09-13 18:45:00 +00:00
Benjamin Kramer 8495379bd6 CGDebugInfo: Hoist string allocation in a helper function. No functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@190314 91177308-0d34-0410-b5e6-96231b3b80d8
2013-09-09 16:39:06 +00:00
Benjamin Kramer e575359c34 Fix constructor-related typos.
Noticed by Roman Divacky.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@190311 91177308-0d34-0410-b5e6-96231b3b80d8
2013-09-09 14:48:42 +00:00
Manman Ren c23b1db626 Debug Info: pass in DIScope instead of DIDescriptor in createFieldType.
Improve readability. No functionality change.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@190268 91177308-0d34-0410-b5e6-96231b3b80d8
2013-09-08 03:45:05 +00:00
David Blaikie 74341d8fd4 PR17046, PR17092: Debug Info assert-on-valid due to member loss when context creation recreates the item the context is created for
By removing the possibility of strange partial definitions with no
members that older GCC's produced for the otherwise unreferenced outer
types of referenced inner types, we can simplify debug info generation
and correct this bug. Newer (4.8.1 and ToT) GCC's don't produce this
quirky debug info, and instead produce the full definition for the outer
type (except in the case where that type is dynamic and its vtable is
not emitted in this TU).

During the creation of the context for a type, we may revisit that type
(due to the need to visit template parameters, among other things) and
used to end up visiting it first there. Then when we would reach the
original code attempting to define that type, we would lose debug info
by overwriting its members.

By avoiding the possibility of latent "defined with no members" types,
we can be sure than whenever we already have a type in a cache (either a
definition or declaration), we can just return that. In the case of a
full definition, our work is done. In the case of a partial definition,
we must already be in the process of completing it. And in the case of a
declaration, the completed/vtable/etc callbacks can handle converting it
to a definition.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@190122 91177308-0d34-0410-b5e6-96231b3b80d8
2013-09-06 06:45:04 +00:00
David Blaikie 29b8b68c93 Reapply r189013 (reverted in r189906) now that the underlying issue is fixed and tested (in r189996)
Debug info emission was tripping over an IRGen bug (fixed in r189996)
that was resulting in duplicate emission of static data members of class
templates in namespaces.

We could add more test coverage to debug info for this issue
specifically, but I think the underlying IRGen test is more targeted and
sufficient for the issue.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@190001 91177308-0d34-0410-b5e6-96231b3b80d8
2013-09-04 22:03:57 +00:00
David Blaikie 2a7002ed1e Revert "DebugInfo: Remove explicit declaration-emissiong handling now that we have a more principled approach (the 'requires complete type' callback)"
This reverts commit r189013.

This is causing a segfault crash in a test case I have. Reverting while
I investigate the issue.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189906 91177308-0d34-0410-b5e6-96231b3b80d8
2013-09-04 02:12:12 +00:00
Yunzhong Gao 3b8e0b7f96 Revert r189649 because it was breaking sanitizer bots.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189660 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-30 08:53:09 +00:00
Yunzhong Gao 51a31e1da7 Fixing a bug where debug info for a local variable gets emitted at file scope.
The patch was discussed in Phabricator. See:
http://llvm-reviews.chandlerc.com/D1281



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189649 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-30 05:37:02 +00:00
Manman Ren 83369bf8f6 Debug Info: generate a unique identifier for C++ struct, class, union, and enum.
We use CXX mangler to generate unique identifier for external C++ struct,
union, class and enum. Types with unique identifier are added to retained
types by DIBuilder.

Testing cases are updated to reflect the unique identifier generated for types.
The order of MDNodes is changed because of retained types and testing cases
are updated accordingly.

Testing case debug-info-uuid.cpp now emits error with Itanium mangler, since
uuid is not yet handled in Itanium mangler. And it will check for the error
message.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189622 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-29 23:19:58 +00:00
Manman Ren 1876045386 Debug Info: this reverts commit r189600.
We had further discussions on how to retain types, whether to do it in front end
or in DIBuilder. And we agree to do it in DIBuilder so front ends
generating unique identifier do not need to worry about retaining them.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189609 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-29 20:48:48 +00:00
Manman Ren f1acc31e45 Debug Info: generate a unique identifier for C++ struct, class, union, and enum.
We use CXX mangler to generate unique identifier for external C++ struct,
union, class and enum. Types with unique identifier are added to RetainedTypes
to make sure they are treated as used even when all uses are replaced with
the identifiers.

A single type can be added to RetainedTypes multiple times. For example, both 
createForwardDecl and createLimitedType can add the same type to RetainedTypes.
A set is used to avoid duplication when updating AllRetainTypes in DIBuilder.

Testing cases are updated to reflect the unique identifier generated for types.
The order of MDNodes is changed because of retained types and testing cases
are updated accordingly.

Testing case debug-info-uuid.cpp now emits error with Itanium mangler, since
uuid is not yet handled in Itanium mangler.

We choose to update RetainedTypes in clang, then at finalize(), we update
AllRetainTypes in DIBuilder. The other choice is to update AllRetainTypes
in DIBuilder when creating a DICompositeType with unique identifier. This
option requires using ValueHandle for AllRetainTypes in DIBuilder since
the created DICompositeType can be modified later on by setContainingType etc.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189600 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-29 18:51:51 +00:00
Eric Christopher ac7c25f0ca 80-col.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189531 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-28 23:12:10 +00:00
David Blaikie 11fa7518cb DebugInfo: Further fix/improvements to r189494 (and LLVM r189495).
Selfhosting was crashing with the same type of problem but involving
template specializations.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189530 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-28 23:06:52 +00:00
Manman Ren 0a0be741f2 Format. Thanks David for pointing it out.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189521 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-28 21:46:36 +00:00
Manman Ren f332733e14 Debug Info: update interface for CreateEnumType and getOrCreateRecordFwdDecl.
Both functions will take a Type pointer instead of a Decl pointer. This helps
with follow-up type uniquing patches, which need the Type pointer to call
CXX mangler to generate unique identifiers.

No functionality change.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189519 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-28 21:20:28 +00:00
David Blaikie dd65802b1c More comments for r189494.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189516 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-28 20:58:00 +00:00
David Blaikie 4a68491fa1 Comments for r189494
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189504 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-28 20:24:55 +00:00
David Blaikie c576127173 PR16995: Failing to associate static members with their enclosing class
In the transition from declaration (with some members) to definition, we
were overwriting the list of members with the empty list when attaching
template parameters.

The fix is in llvm::DICompositeType::addMember (along with asserts that
cause this bug to be covered by existing Clang test cases), including
adding some asserts to catch this sort of issue which found issues fixed
in this commit.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189494 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-28 17:27:13 +00:00
David Blaikie c7971a9efd Revert "PR14569: Omit debug info for thunks"
This reverts commit r189320.

Alexey Samsonov and Dmitry Vyukov presented some arguments for keeping
these around - though it still seems like those tasks could be solved by
a tool just using the symbol table. In a very small number of cases,
thunks may be inlined & debug info might be able to save profilers &
similar tools from misclassifying those cases as part of the caller.

The extra changes here plumb through the VarDecl for various cases to
CodeGenFunction - this provides better fidelity through a few APIs but
generally just causes the CGF::StartFunction to fallback to using the
name of the IR function as the name in the debug info.

The changes to debug-info-global-ctor-dtor.cpp seem like goodness. The
two names that go missing (in favor of only emitting those names as
linkage names) are names that can be demangled - emitting them only as
the linkage name should encourage tools to do just that.

Again, thanks to Dinesh Dwivedi for investigation/work on this issue.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189421 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-27 23:57:18 +00:00
David Majnemer 5db8b3138f DebugInfo: Emit info for casted decls in template args
Summary:
Previously the backend wouldn't get to see the underlying GlobalValue
that corresponds to the template argument because it would be hidden by
a cast at the IR level.  Instead strip the pointer casts off of the
value until we see the underlying GlobalValue.

Reviewers: dblaikie, echristo, majnemer

Reviewed By: majnemer

CC: cfe-commits

Differential Revision: http://llvm-reviews.chandlerc.com/D1508

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189200 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-25 22:13:27 +00:00
David Majnemer 87b1f6d190 DebugInfo: Emit info for constant expressions in template arguments
Summary:
This allows us to handle the general case where a non-type template
argument evaluates to a constant expression which isn't integral or a
declaration.

This fixes PR16939.

Reviewers: dblaikie, rsmith

Reviewed By: dblaikie

CC: cfe-commits

Differential Revision: http://llvm-reviews.chandlerc.com/D1453

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189165 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-24 08:21:10 +00:00
David Blaikie 472519660a DebugInfo: Remove explicit declaration-emissiong handling now that we have a more principled approach (the 'requires complete type' callback)
No functionality change intended.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189013 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-22 13:36:01 +00:00
David Blaikie 55a2b3dbff DebugInfo: Require only the declaration of types only used as parameter and return types
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188962 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-21 23:23:07 +00:00
David Blaikie 5e6937bf35 DebugInfo: comment/inlining based on feedback from Eric & Adrian
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188834 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-20 21:49:21 +00:00
David Blaikie eaacc885de DebugInfo: Simplify/clarify propagation of typemembers between declaration and definition
Based on code review feedback from Eric Christopher (on r188739) and
Adrian Prantl (r188642).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188829 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-20 21:03:29 +00:00
David Blaikie 5434fc29cb Revert "Revert "Revert "Revert "DebugInfo: Omit debug info for dynamic classes in TUs that do not have the vtable for that class""""
This reverts commit r188687 (reverts r188642 (reverts 188600 (reverts
188576))).

With added test coverage & fix for -gline-tables-only.

Thanks Michael Gottesman for reverting this patch when it demonstrated
problems & providing a reproduction/details to help me track this down.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188739 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-20 01:28:15 +00:00
Michael Gottesman 90e5523e4c Revert "Revert "Revert "DebugInfo: Omit debug info for dynamic classes in TUs that do not have the vtable for that class"""
This reverts commit r188642.

This change is causing LTO builds to cause our 16 GB machines to swap and OOM
all weekend. I am going to work with Dave Blaikie to resolve the issue.

Sorry Dave =(.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188687 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-19 18:46:16 +00:00
David Blaikie fc946271e0 DebugInfo: Do not include line/file info for artificial parameters & parameters of artificial functions
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188651 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-19 03:37:48 +00:00
David Blaikie fcbeab6828 Revert "Revert "DebugInfo: Omit debug info for dynamic classes in TUs that do not have the vtable for that class""
This reverts commit r188600.

r188640/r188639 fixed the root cause of the crash-on-valid that r188600
originally introduced. This now appears to bootstrap debug clang
successfully to the best of my testing.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188642 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-18 17:59:12 +00:00
David Blaikie c138ff5868 DebugInfo: Avoid duplicating types that may be created during the process of creating their context
A partner to r188639, this is a somewhat heavy-handed fix to the general
issue, since even after that prior change the issue does still
unavoidably arise with template parameters (see test case).

There are other ways we could consider addressing this (see FIXME).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188640 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-18 17:36:19 +00:00
David Blaikie 498298d9d7 DebugInfo: Don't emit vbase 'containing types' for context chain limited types
Possible minor reduction in debug info & avoid some cases where creating
a context chain could lead to the type the context chain is being
created for, being created. (this is still possible with template
parameters - tests/fixes/improvements to follow)

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188639 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-18 16:55:33 +00:00
David Blaikie 3de73f007b DebugInfo: don't require full definitions for friend classes
Fixes a crash-on-valid introduced by r188486 (which should've occurred
earlier but for a blatant bug where calling createFwdDecl from the
requireCompleteType callback was useless under -flimit-debug-info and we
were just getting lucky with other later callbacks requiring the type
anyway).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188622 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-18 04:50:23 +00:00
David Blaikie ced39ec4ab PR16927: Don't assert (or, previously, skip) static data members of enumeration type
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188612 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-17 20:01:53 +00:00
David Blaikie 05a0569aa1 Revert "DebugInfo: Omit debug info for dynamic classes in TUs that do not have the vtable for that class"
This reverts commit r188576.

Reverting while I investigate a selfhosting buildbot failure on Darwin.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188600 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-17 00:06:55 +00:00
David Blaikie 8863e6baaa DebugInfo: Canonicalize namespaces to avoid emitting multiple namespaces with the same name but different lines
Updated test case to not rely on line numbers in more cases (it's hard
to use the @ check syntax for debug info test cases (due to the
interesting ordering of metadata) and this case in particular (given the
hash-line directive)) - left a few in there to cover the line number
information for these.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188585 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-16 22:52:07 +00:00
David Blaikie 152701b54a DebugInfo: Omit debug info for dynamic classes in TUs that do not have the vtable for that class
This reduces Clang's .dwo (fission debug info) size by 23% over
Clang+LLVM.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188576 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-16 20:40:29 +00:00
David Blaikie 841fd110a3 DebugInfo: Contrain the record type parameter for CollectRecordFields
This is the correct type (as is demonstrated by the fact that the caller
didn't need to change) & will be useful in a future patch.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188575 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-16 20:40:25 +00:00
Evgeniy Stepanov 045a9f6762 Revert r188498.
This change broke release+asserts build with compiler-rt.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188539 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-16 10:35:31 +00:00
David Blaikie cbcb030ab3 DebugInfo: CollectRecordStaticField -> CreateRecordStaticField to return its result.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188501 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-15 22:50:29 +00:00
David Blaikie fab829d611 Remove unnecessary explicit cast.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188500 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-15 22:42:12 +00:00
David Blaikie f1f5cc32f0 DebugInfo: Split out the implementation of getStaticDataMemberDeclaration for future use
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188498 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-15 22:30:23 +00:00
David Blaikie 327a36aea7 Fix assert added in r188494
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188496 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-15 22:18:13 +00:00
David Blaikie 409ab5670c DebugInfo: Remove unused conditional
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188494 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-15 21:55:56 +00:00
David Blaikie 27ab0362bc DebugInfo: Make CGDebugInfo::getStaticDataMemberDeclaration's argument type match the semantics
Rather than having a cast immediately inside the function, push that
type requirement out to the callers.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188492 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-15 21:42:43 +00:00
David Blaikie 492b1020a7 DebugInfo: Add a FIXME, remove a FIXME.
(the removed FIXME no longer applies since we made this debug info
optimization not apply to C)

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188491 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-15 21:21:19 +00:00
David Blaikie 278048971c DebugInfo: Unify & optimize the lazy addition of record types
Rather than going through the whole getOrCreateType machinery to
manifest a type, cut straight to the implementation because we know we
have to do work.

While the previous implementation was sufficient for the two cases
(completeness and required completeness) we have already (the general
machinery could inspect the type for those attributes & go down the full
definition path), a pending change (to emit info for types when we emit
their vtables) won't have that luxury & we'll need to force the creation
rather than relying on the general purpose routine.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188486 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-15 20:49:17 +00:00
David Blaikie c5cd1a712e DebugInfo: Revert change to the return type of createRecordFwdDecl
It still does only return DICompositeType, but I've no need to make that
change right now.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188482 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-15 20:17:25 +00:00
David Blaikie b94887e70f DebugInfo: remove unnecessary type registration
This happens in the caller a few frames up anyway.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188475 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-15 18:59:44 +00:00
David Blaikie 951094baa0 DebugInfo: Don't create duplicate forward declaration metadata unnecessarily.
No functionality change, at best a slight (questionable) optimization,
but necessary for correctness of future work.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188474 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-15 18:59:40 +00:00
David Blaikie 00383088ac Drive by cleanup
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188251 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-13 04:21:38 +00:00
David Blaikie b3c2377422 DebugInfo: Simplify declaration building code - relying on the limit debug info checking already in CreateType(RecordType)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188222 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-12 23:14:36 +00:00
David Blaikie 4a0771680e DebugInfo: simplify some limited/declaration creation APIs
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188214 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-12 22:24:20 +00:00
David Blaikie d6d5d69f61 Only emit debug info for implicit members that actually get codegen, not just ODR use.
This includes special members (copy/default ctor, copy assign, default
ctor) and template specializations for member function templates.

Good for a 5% decrease (1.80 to 1.71 GB) in size on Clang+LLVM's .dwo
files (when using fission).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@188085 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-09 17:20:05 +00:00
David Blaikie ac00b79047 DebugInfo: Don't prefer declarations over definitions in -flimit-debug-info in C
Without an ODR, the -flimit-debug-info debug info size optimization of
emitting declarations for fully defined types when only a declaration is
needed by the TU, is incorrect. Emit the full definition whenever it's
available in non-C++.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@187611 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-01 20:57:40 +00:00
David Blaikie 8058833e12 DebugInfo: Emit template arguments for limited types used for context.
We emit definitions with no members when a nested type is
referenced/required (GCC does the same, to be fair) but failed to attach
the template arguments in such a case.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@187608 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-01 20:31:40 +00:00
David Blaikie 841b37c346 Reduce a variable's scope (no functionality change)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@187594 91177308-0d34-0410-b5e6-96231b3b80d8
2013-08-01 18:23:24 +00:00
Adrian Prantl b6cdc96e76 Debug Info: Fix an oversight of r186553. Ensure that the function prologue
of an artificial function gets an artificial location as well.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@187074 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-24 20:34:39 +00:00
Adrian Prantl 1f4379184e Implement a better fix for r186894 by setting the appropriate type for __byref_variable_layout.
rdar://problem/14386148

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@186898 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-23 00:12:14 +00:00
Adrian Prantl 334ded9f49 Debug Info: Acknowledge the alignment when locating byref block variables.
Fixes rdar://problem/14386148

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@186894 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-22 23:44:26 +00:00
Eric Christopher 8fed3f4879 Update createCompileUnit call for llvm changes.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@186638 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-19 00:51:58 +00:00
Adrian Prantl b061ce2c7a s/BuiltinLocation/ArtificialLocation/
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@186557 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-18 01:36:04 +00:00
Eric Christopher b2d139257d Instead of checking against some version of "isType()" go ahead and
use the conversion to bool to check if we've managed to get a type
that isn't default constructed - as we meant to in the first place.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@186556 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-18 00:52:50 +00:00
Adrian Prantl 0a10323b33 Fix a compile error caught by bb-chapuni.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@186555 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-18 00:47:12 +00:00
Adrian Prantl 6e73edfdea Fix a compile error caught by bb-chapuni.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@186554 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-18 00:43:29 +00:00
Adrian Prantl ed6bbe4ab8 Replace llvm::DIBuilder::DisableDebugLocations() with two RAII interfaces
inspired by CodegenFunction::LexicalScope.
- NoLocation temporarily turns off debug locations altogether.
  This is useful for emitting instructions that should be
  counted towards the function prologue.
- BuiltinLocation temporarily switches to an artificial debug location
  that has a valid scope, but no line information. This is useful when
  emitting compiler-generated helper functions that have no source
  location associated with them.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@186552 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-18 00:28:02 +00:00
Adrian Prantl 18a0cd5ef7 Clarified documentation.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@186551 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-18 00:27:59 +00:00
Adrian Prantl 5f4554f8c8 Simplify logic by using the appropriate function.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@186550 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-18 00:27:56 +00:00
Eric Christopher 7dab97b5af 80-column fixes.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@186542 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-17 22:52:53 +00:00
Eric Christopher 688cf5b057 Move BlockLiteralGeneric earlier in CGDebugInfo and remove
BlockLiteralGenericSet and replace with a call to isType() on the
BlockLiteralGeneric.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@186293 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-14 21:12:44 +00:00
Eric Christopher d3003dc685 Update a few comments and reformat a decl for clarity.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@186292 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-14 21:00:07 +00:00
David Blaikie 658cd2c287 PR16214, PR14467: DebugInfo: use "RequireCompleteType" to decide when to emit the full definition of a type in -flimit-debug-info
This simplifies the core benefit of -flimit-debug-info by taking a more
systematic approach to avoid emitting debug info definitions for types
that only require declarations. The previous ad-hoc approach (3 cases
removed in this patch) had many holes.

The general approach (adding a bit to TagDecl and callback through
ASTConsumer) has been discussed with Richard Smith - though always open
to revision.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@186262 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-13 21:08:14 +00:00
David Blaikie 226399ce18 Correctly classify pack expansions as NON_CANONICAL_UNLESS_DEPENDENT
Test coverage for non-dependent pack expansions doesn't demonstrate a
failure prior to this patch (a follow-up commit improving debug info
will cover this commit specifically) but covers a related hole in our
test coverage.

Reviewed by Richard Smith & Eli Friedman.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@186261 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-13 21:08:08 +00:00
Adrian Prantl 4b87382ab9 Reapply an improved version of r180816/180817.
Do not generate VLAs as complex variables any more, as they are now
correctly represented as breg+0 locations in the backend.

(Paired commit with LLVM: r185966)

rdar://problem/13658587

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@185967 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-09 20:29:03 +00:00
Manman Ren b6b0a711e4 Debug Info: clean up usage of Verify.
No functionality change. It should suffice to check the type of a debug info
metadata, instead of calling Verify.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@185463 91177308-0d34-0410-b5e6-96231b3b80d8
2013-07-02 19:01:53 +00:00
Peter Collingbourne 24118f5d62 Use the zero-argument DIBuilder::createNullPtrType in Clang.
Differential Revision: http://llvm-reviews.chandlerc.com/D1051

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@185115 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-27 22:51:01 +00:00
Eli Friedman cd06f26835 Rewrite record layout for ms_struct structs.
The old implementation of ms_struct in RecordLayoutBuilder was a
complete mess: it depended on complicated conditionals which didn't
really reflect the underlying logic, and placed a burden on users of
the resulting RecordLayout. This commit rips out almost all of the
old code, and replaces it with simple checks in
RecordLayoutBuilder::LayoutBitField.

This commit also fixes <rdar://problem/14252115>, a bug where class
inheritance would cause us to lay out bitfields incorrectly.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@185018 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-26 20:50:34 +00:00
Reid Kleckner 12df246d6d [AST] Introduce a new DecayedType sugar node
The goal of this sugar node is to be able to look at an arbitrary
FunctionType and tell if any of the parameters were decayed from an
array or function type.  Ultimately this is necessary to implement
Microsoft's C++ name mangling scheme, which mangles decayed arrays
differently from normal pointers.

Reviewers: rsmith

Differential Revision: http://llvm-reviews.chandlerc.com/D1014

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@184763 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-24 17:51:48 +00:00
David Blaikie ac8f43c9cb DebugInfo: ensure negative enumerators are emitted as such
There's still a problem here - since we're not appropriately using the
signedness/range of the enum to chooset the encoding and emission of
enumerators, but GCC has some bugs around this too so I assume that's
not /such/ a high priority though I may get to it soon out of
completeness.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@184695 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-24 07:13:13 +00:00
David Blaikie 35178dc09d DebugInfo: Support (using GNU extensions) for template template parameters and parameter packs
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@184644 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-22 18:59:18 +00:00
David Blaikie 23e66db769 DebugInfo: Random tidying up/simplification
No functionality change intended.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@184614 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-22 00:09:36 +00:00
David Blaikie f0c31d98d3 PR16214: Debug info for types first used via pointers or qualified types & later require definitions
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@184594 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-21 21:03:11 +00:00
David Blaikie 076f51fd1f Fix all the silly things I committed in r184509
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@184512 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-21 00:59:44 +00:00
David Blaikie eab6a36cf1 Alternative fix for r184473.
This just seems a bit tidier/more principled. Based on a patch provided
by Adrian - with the only minor tweak that it needed to use
"getTypeOrNull" rather than "getCompletedTypeOrNull" since we don't
store declarations in the CompletedTypes cache.

No intended functionality change.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@184509 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-21 00:40:50 +00:00
Adrian Prantl 6bb110292c Debug Info: Attempt to resolve forward declarations if we are not emitting
limited debug info.

This is another small addendum to r184252.

rdar://problem/14101097

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@184473 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-20 21:17:24 +00:00
David Blaikie 41c9baed95 Debug Info: PR14763/r183329 - specify that non-trivial pass-by-value parameters are stored indirectly
This is to fix the location information for such parameters to refer to
the object accessible through the pointer rather than to the pointer
parameter itself.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@184367 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-19 21:53:53 +00:00
Adrian Prantl 776bfa16c9 Add some comments to r184252.
rdar://problem/14101097

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@184259 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-18 23:32:21 +00:00
Adrian Prantl 14c1a13e64 Emit forward decls for structs with declarations only when we are
limiting debug info.

FIXME: There is still work left to do here, the testcase should work even with -flimit-debug-info.

rdar://problem/14101097

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@184252 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-18 23:01:56 +00:00
Eric Christopher 56b108ad2b 80-column fixup after recent change to getOrCreateType.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@183586 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-07 22:54:39 +00:00
Adrian Prantl 80e8ea92d6 address some comments on r183474:
- factor the name construction part out from constructSetterName
- rename constructSetterName to the more appropriate constructSetterSelector

no functionality change intended.
rdar://problem/14035789

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@183582 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-07 22:29:12 +00:00
Adrian Prantl 4f97f85335 documentation: remove confusing reference to properties.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@183475 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-07 01:10:48 +00:00
Adrian Prantl 5ae17a1770 ObjC Debug Info: Emit the names of accessors whenever they diverge from
the default names, not just when the isImplicit flag is set.

rdar://problem/14035789

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@183474 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-07 01:10:45 +00:00
Adrian Prantl b5a50075d8 Improve documentation.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@183473 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-07 01:10:41 +00:00
David Blaikie 993b39f4cd PR14763: Debug info for non-trivial record parameters
There seems to have been some erroneous code attempting to describe the
ABI of parameters (non-trivial record parameters are passed by
reference). This would break the type of the function (especially when
it caused a mismatch between the type of a declaration & a definition)
causing PR14763 and PR14645.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@183329 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-05 18:30:31 +00:00
David Blaikie 5f6e2f4010 PR16214: Debug Info: -flimit-debug-info doesn't omit definitions for types used via typedefs
In an effort to make -flimit-debug-info more consistent I over-shot the
mark & made types used via typedefs never produce definitions in the
debug info (even if the type was used in a way that would require a
definition).

The fix for this is to do exactly what I was hoping to do at some point
- plumb the declaration/definition choice through the various layers of
"CreateType" in CGDebugInfo. In this way we can produce declarations
whenever they are sufficient & definitions otherwise - including when
qualifiers are used, for example (discovered in PR14467). This may not
be complete (there may be other types/situations where we need to
propagate the "declaration/definition" choice) but it lays the basic
foundation which we can enhance in future iterations.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@183296 91177308-0d34-0410-b5e6-96231b3b80d8
2013-06-05 05:32:23 +00:00
David Blaikie b0f77b0657 DebugInfo: Rename CreatePointerType to getOrCreateTypeDeclaration
To make this more consistent with 'getOrCreateType' & clarify the
distinction between the two. The only thing I couldn't quite communicate
in the name is that getOrCreateTypeDeclaration may actually produce a
full definition (in -fno-limit-debug-info) but the point is to call it
whenever only a declaration is needed & the implementation can choose
whether to provide a declaration or definition.

(also, unfortunately, getOrCreateType can produce declarations too - we
should sure this up by making it not do that - any caller that can
tolerate a declaration should be calling getOrCreateTypeDeclaration
instead)

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@182674 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-24 21:33:22 +00:00
David Blaikie 912964863c PR16091: Error when attempting to emit debug info for undeduced auto return types
Perhaps we should just suppress this, rather than erroring, but since we
have the infrastructure for it I figured I'd use it - if this is
determined to be not the right thing we should probably remove that
infrastructure entirely. I guess it's lying around from the early days
of implementing debug info support.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@182673 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-24 21:24:35 +00:00
David Blaikie 9a84529ed0 Debug Info: Handle function/method types using the most specific type
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@182533 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-22 23:22:42 +00:00
Adrian Prantl 0cb0002332 Comment and cleanup.
rdar://problem/13359718

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@182524 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-22 21:37:49 +00:00
Adrian Prantl c32a217472 Bugfix for r181629:
- The return type should be a pointer to the class type.
- Make the condition more specific.

rdar://problem/13359718

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@182504 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-22 19:10:15 +00:00
David Blaikie e2eb89a8fb Debug Info: Simplify the code changed in r182403 to reduce indent & avoid a duplicate lookup in the insertion case
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@182404 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-21 18:29:40 +00:00
David Blaikie 297dee826f Debug Info: don't bother reinserting elements into maps we just retrieved them from
(no intended behavior change)

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@182403 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-21 18:08:19 +00:00
David Blaikie 1e97c1e978 Fix whitespace
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@182400 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-21 17:58:54 +00:00
David Blaikie fc46ebc2b1 PR14606: Debug Info for namespace aliases/DW_TAG_imported_module
This resolves the last of the PR14606 failures in the GDB 7.5 test
suite. (but there are still unresolved issues in the imported_decl case
- we need to implement optional/lazy decls for functions & variables
like we already do for types)

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@182329 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-20 22:50:41 +00:00
David Blaikie 9faebd23fd Revert "Revert "Debug Info: Using declarations/DW_TAG_imported_declaration of variables, types, and functions.""
This reverts commit r181947 (git d2990ce56a16050cac0d7937ec9919ff54c6df62 )

This addresses one of the two issues identified in r181947, ensuring
that types imported via using declarations only result in a declaration
being emitted for the type, not a definition. The second issue (emitting
using declarations that are unused) is hopefully an acceptable increase
as the real fix for this would be a bit difficult (probably at best we
could record which using directives were involved in lookups - but may
not have been the result of the lookup).

This also ensures that DW_TAG_imported_declarations (& directives) are
not emitted in line-tables-only mode as well as ensuring that typedefs
only require/emit declarations (rather than definitions) for referenced
types.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@182231 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-20 04:58:53 +00:00
Adrian Prantl b509224b28 Drop the const from the isa test.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@182178 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-17 23:58:45 +00:00
Adrian Prantl 687ecae119 ObjC Debug Info: Emit the correct method names for accessors for
properties declared in a protocol.

rdar://problem/13798000

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@182176 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-17 23:49:10 +00:00
Eric Christopher f0890c420b 80-columns.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181965 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-16 00:52:20 +00:00
Eric Christopher 13c9767104 Replace a pile of calls with an instance variable that's set
once. Should be no functional change.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181964 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-16 00:45:23 +00:00
Eric Christopher 6537f08355 Whitespace.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181960 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-16 00:45:12 +00:00
David Blaikie 214c3d6c64 Revert "Debug Info: Using declarations/DW_TAG_imported_declaration of variables, types, and functions."
This reverts commit r181393 (git 3923d6a87f).

This seems to be emitting too much extra debug info for two (known)
reasons:
* full class definitions are emitted when only declarations are expected
* unused using declarations still produce DW_TAG_imported_declarations

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181947 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-15 23:46:19 +00:00
David Blaikie 7be62a87ab PR15956: Debug Info: Include the appropriate file location in types created due to using declarations
We might benefit from API refactoring here (why pass in a value that's
derived from another parameter?) but this is the immediate issue.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181747 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-14 00:34:20 +00:00
David Blaikie f8aa155e40 Debug Info: PR14992: Support values for non-type template parameters of function type
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181685 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-13 06:57:50 +00:00
David Blaikie 87360f2acd Debug Info: Comment changes in r181393 by request of echristo
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181672 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-12 18:05:52 +00:00
David Blaikie e806512877 Debug Info: correct comment
Eric's code review feedback to r181644

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181650 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-10 23:36:06 +00:00
David Blaikie 776a36453a Debug Info: Silently accept template argument packs
We could support the GCC extension DW_TAG_GNU_template_parameter_pack if
we're feeling adventurous, at some point - but I don't think GDB's doing
anything useful with it yet anyway.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181644 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-10 22:53:25 +00:00
David Blaikie 9dfd24324c PR14992: Debug Info: Support more non-type template parameters
* Provide DW_TAG_template_value_parameter for pointers, function
  pointers, member pointers, and member function pointers (still missing
  support for template template parameters which GCC encodes as a
  DW_TAG_GNU_template_template_param)
* Provide values for all but the (member & non-member) function pointer case.
  Simple constant integer values for member pointers (offset within the
  object) and address for the value pointer case. GCC doesn't provide a
  value for the member function pointer case so I'm not sure how, if at
  all, GDB supports encoding that. & non-member function pointers should
  follow shortly in a subsequent patch.
* Null pointer value encodings of all of these types, including
  correctly encoding null data member pointers as -1.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181634 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-10 21:53:14 +00:00
Adrian Prantl 566a9c3680 ObjC debug info: Substitute the class type for methods that return
a related type (e.g., if they use the instancetype keyword).

rdar://problem/13359718

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181629 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-10 21:08:31 +00:00
David Blaikie 089db2e3af Debug Info: Remove unnecessary check for dependent array types
This was added, untested (though the relevant crash was tested), in
r128725/PR9600. Removing it doesn't cause failures & nothing I can
imagine could cause this check to ever return 'true' (we should never be
dealing with dependent types here). The subsequent change to check
"isIncompleteType" (r128855/PR9608) makes a lot more sense.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181542 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-09 20:48:12 +00:00
Adrian Prantl f06989b9f3 typo
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181485 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-08 23:37:22 +00:00
David Blaikie 3923d6a87f Debug Info: Using declarations/DW_TAG_imported_declaration of variables, types, and functions.
Basic support is implemented here - it still doesn't account for
declared-but-not-defined variables or functions. It cannot handle out of
order (declared, 'using', then defined) cases for variables, but can
handle that for functions (& can handle declared, 'using'd, and not
defined at all cases for types).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181393 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-08 06:01:46 +00:00
David Blaikie c2fc4ab28c DebugInfo: Support imported modules (using directives) within lexical blocks.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181272 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-06 23:33:13 +00:00
Adrian Prantl 230ea4179a Revert 180817 because 180816 was reverted.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@180823 91177308-0d34-0410-b5e6-96231b3b80d8
2013-04-30 22:45:09 +00:00
Adrian Prantl 826374a4de Do not generate VLAs as complex variables any more, as they are now
correctly represented as breg+0 locations in the backend.

(Paired commit with LLVM: r180815)

rdar://problem/13658587

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@180817 91177308-0d34-0410-b5e6-96231b3b80d8
2013-04-30 22:17:36 +00:00
David Blaikie 957dac5b6d Revert "Revert "PR14606: Debug info for using directives/DW_TAG_imported_module""
This reverts commit 179839 now that the corresponding LLVM patch has been fixed.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@179997 91177308-0d34-0410-b5e6-96231b3b80d8
2013-04-22 06:13:21 +00:00
Adrian Prantl 59d6a71d68 Emit the underlying type in the debug info for all kinds of fixed enums
instead of only C++11-scoped-with-class-tag enums.

rdar://problem/13463793

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@179879 91177308-0d34-0410-b5e6-96231b3b80d8
2013-04-19 19:56:39 +00:00
Eric Christopher c3e81e78e8 Revert "PR14606: Debug info for using directives/DW_TAG_imported_module"
This reverts commit r179837 as it seems to be causing test failures.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@179839 91177308-0d34-0410-b5e6-96231b3b80d8
2013-04-19 07:46:36 +00:00
David Blaikie cec3984582 PR14606: Debug info for using directives/DW_TAG_imported_module
More changes later for using declarations/DW_TAG_imported_declaration.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@179837 91177308-0d34-0410-b5e6-96231b3b80d8
2013-04-19 07:04:02 +00:00
David Blaikie bb00079d2c Give CGDebugInfo::getContextDescriptor a more specific return type
Not that the DI* hierarchy is terribly type safe, but this makes the contract a
little clearer I think.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@179835 91177308-0d34-0410-b5e6-96231b3b80d8
2013-04-19 06:56:38 +00:00
John McCall 64aa4b3ec7 Standardize accesses to the TargetInfo in IR-gen.
Patch by Stephen Lin!

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@179638 91177308-0d34-0410-b5e6-96231b3b80d8
2013-04-16 22:48:15 +00:00
Eric Christopher f068c92f22 Revert "Revert r178079, it caused PR15637."
This reverts commit r178497 since the backend has been fixed.

Also add a test to ensure that we're emitting template information for unions.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@178587 91177308-0d34-0410-b5e6-96231b3b80d8
2013-04-02 22:59:11 +00:00
Nico Weber bd0152fb25 Revert r178079, it caused PR15637.
Also add a test for PR15637.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@178497 91177308-0d34-0410-b5e6-96231b3b80d8
2013-04-01 20:33:18 +00:00
Adrian Prantl 9b97adfb77 Bugfix/Followup for r177086.
* Store the .block_descriptor (instead of self) in the alloca so we
  can guarantee that all captured variables are available at -O0.
* Add the missing OpDeref for the alloca.
rdar://problem/12767564

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@178361 91177308-0d34-0410-b5e6-96231b3b80d8
2013-03-29 19:20:35 +00:00
Adrian Prantl e86fcc46f5 Improvement on r177086.
* Let DIType for block-captured self to point to the completed cached
  interface type.
rdar://problem/12767564

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@178360 91177308-0d34-0410-b5e6-96231b3b80d8
2013-03-29 19:20:29 +00:00
David Blaikie 2fcadbeecb Remove magic number usage from CGDebugInfo with new DICompositeType::setContainingType
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@178092 91177308-0d34-0410-b5e6-96231b3b80d8
2013-03-26 23:47:35 +00:00
David Blaikie d74505e985 Debug Info: remove use of magic numbers to tweak specific debug info metadata fields
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@178079 91177308-0d34-0410-b5e6-96231b3b80d8
2013-03-26 22:09:53 +00:00
Nick Lewycky f2b5e07072 Make clang emit linkage names in debug info for subprograms when coverage info
is enabled. Also add a new -test-coverage cc1 flag which makes testing coverage
possible and add our first clang-side coverage test.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@177470 91177308-0d34-0410-b5e6-96231b3b80d8
2013-03-20 01:38:16 +00:00
Adrian Prantl bea407c927 Always declare the .block_descriptor parameter, not just the local copy.
Un-breaks gdb's invoke-block behavior.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@177118 91177308-0d34-0410-b5e6-96231b3b80d8
2013-03-14 21:52:59 +00:00
Adrian Prantl 836e7c9357 Allocate stack storage for .block_descriptor and captured self at -O0.
This way the register allocator will not optimize away the debug info
for captured variables.

Fixes rdar://problem/12767564

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@177086 91177308-0d34-0410-b5e6-96231b3b80d8
2013-03-14 17:53:33 +00:00
Adrian Prantl 00df5eaa9f Force column info to be generated for call expressions so we can
differentiate multiple inlined call sites on the same line
in the debug info.

Fixes rdar://problem/13036237

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@176895 91177308-0d34-0410-b5e6-96231b3b80d8
2013-03-12 20:43:25 +00:00
Adrian Prantl ebbd7e07aa Improve the caching of debuginfo Objective C interface types.
Generate forward declarations that are RAUW'd by finalize().
We thus avoid outputting the same type several times in multiple
stages of completion.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@176820 91177308-0d34-0410-b5e6-96231b3b80d8
2013-03-11 18:33:46 +00:00
Adrian Prantl 4919de6a53 Ensure that DIType is regenerated after we visit an implementation
that adds ivars to an interface.

Fixes rdar://13175234

This is an update to r176116 that performs a smart caching of interfaces.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@176584 91177308-0d34-0410-b5e6-96231b3b80d8
2013-03-06 22:03:30 +00:00
Adrian Prantl 10b4df7ff2 Temporarily revert r176116 for compile-time performance regression.
This reverts commit ea95e4587fd13606fbf63b10a07a7d02026aa39c.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@176151 91177308-0d34-0410-b5e6-96231b3b80d8
2013-02-27 01:31:55 +00:00
Adrian Prantl 58c7903725 Ensure that DIType is regenerated after we visited an implementation that adds ivars to an interface. Fixes rdar://13175234
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@176116 91177308-0d34-0410-b5e6-96231b3b80d8
2013-02-26 20:01:46 +00:00
David Blaikie c1d0af1f55 Update Clang for a minor DIBuilder breaking change.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@176003 91177308-0d34-0410-b5e6-96231b3b80d8
2013-02-25 01:07:08 +00:00
Eric Christopher ff971d7973 Propagate the split dwarf file information through into the backend
and through to the debug info in the module. In order to make the
testcase a bit more efficient allow the filename to go through
compilation for compile and not assemble jobs and turn off the
extract for cases where we don't create an object.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@175935 91177308-0d34-0410-b5e6-96231b3b80d8
2013-02-22 23:50:16 +00:00
Benjamin Kramer 5eada844fa Streamify getNameForDiagnostic and remove the string versions of PrintTemplateArgumentList.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@175894 91177308-0d34-0410-b5e6-96231b3b80d8
2013-02-22 15:46:01 +00:00
Eric Christopher be5f1be4cf Fix formatting and tabs in file.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@175815 91177308-0d34-0410-b5e6-96231b3b80d8
2013-02-21 22:35:08 +00:00
Fariborz Jahanian 05f8ff134d Patch for debug info of qualified-id types is 'id'
By Adrian Pranti.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@175793 91177308-0d34-0410-b5e6-96231b3b80d8
2013-02-21 20:42:11 +00:00
Guy Benyei 21f18c4fda Add OpenCL samplers as Clang builtin types and check sampler related restrictions.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@174601 91177308-0d34-0410-b5e6-96231b3b80d8
2013-02-07 10:55:47 +00:00
David Blaikie c8c24277a8 Revert r174246, accidentally committed.
This reverts commit 1513eb9284.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@174249 91177308-0d34-0410-b5e6-96231b3b80d8
2013-02-02 00:39:32 +00:00
David Blaikie 1513eb9284 Basics
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@174246 91177308-0d34-0410-b5e6-96231b3b80d8
2013-02-02 00:34:16 +00:00
David Blaikie 0a0f93c90f Fix exception handling line table problems introduced by r173593
r173593 made us a little too eager to associate all code at the end of a
function with the user-written 'return' line. This caused problems with
breakpoints as they'd be set in exception handling code preceeding the
actual non-exception return handling code, leading to the breakpoint never
being hit in non-exceptional execution.

This change restores the pre-r173593 exception handling line information where
the cleanup code is associated with the '}' not the return line.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@174206 91177308-0d34-0410-b5e6-96231b3b80d8
2013-02-01 19:09:49 +00:00
David Blaikie a6504853d2 PR14566: Debug Info: avoid top level lexical blocks in functions
One of the gotchas (see changes to CodeGenFunction) was due to the fix in
r139416 (for PR10829). This only worked previously because the top level
lexical block would set the location to the end of the function, the debug
location would be updated (as per r139416), the location would be set to
the end of the function again (but that would no-op, since it was the same
as the previous location), then the return instruction would be emitted using
the debug location.

Once the top level lexical block was no longer emitted, the end-of-function
location change was causing the debug loc to be updated, regressing that bug.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@173593 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-26 22:16:26 +00:00
NAKAMURA Takumi d24c9ab90b CGDebugInfo.cpp: Fix a warning. [-Wunused-variable]
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@173022 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-21 10:51:28 +00:00
David Blaikie 4b12be6a35 PR14472: Preserve qualifiers while unwrapping types for debug info
Looks like r161368 fixed this for one case but not all. This change generalizes
the solution over all the unwrapping cases. Now that preserving the qualifiers
is done independent of the particular type being unwrapped I won't bother
adding test cases for each one but at least demonstrate that this change was
necessary & sufficient to fix the bug.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@173002 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-21 04:37:12 +00:00
Guy Benyei e6b9d802fb Implement OpenCL event_t as Clang builtin type, including event_t related OpenCL restrictions (OpenCL 1.2 spec 6.9)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@172973 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-20 12:31:11 +00:00
David Blaikie a89701bb49 The last of PR14471: Debug info support for inline in-class initializer for float static members
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@172942 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-20 01:19:17 +00:00
David Blaikie e8d7514d6a Emit the function type of member function pointer types the same as member functions.
Adding the pseudo first parameter to a member function pointer's function type
and mark it as artificial.

Combined with a fix to GDB ( http://sourceware.org/bugzilla/show_bug.cgi?id=14998 )
this fixes gdb.cp/member-ptr.exp with Clang.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@172911 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-19 19:20:56 +00:00
Eric Christopher 0395de3600 Collect both normal and static data members of a class in source
order. Describe static data members to metadata using new interfaces.

Part of PR14471.

Patch by Paul Robinson!

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@172591 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-16 01:22:32 +00:00
David Blaikie 9c78f9bddc Extract the instance-method case for debug info out into a separate function.
This is in preparation for using this to construct the function type for
pointers to member functions to include the implicit/artificial 'this'
parameter in that case as well. (feedback from GDB indicates that this might be
all that's necessary to get it to behave well with Clang's pointer-to-member
function debug output)

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@171809 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-07 23:06:35 +00:00
David Blaikie 67f8b5ef21 Simplify computing debug info type for static member functions.
No (intended) functional change.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@171800 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-07 22:24:59 +00:00
David Blaikie 0028ee3dd3 PR14759: Improve/correct support for debug info for C++ member pointers.
Using added LLVM functionality in r171698. This works in GDB for member
variable pointers but not member function pointers. See the LLVM commit and
GDB bug 14998 for details.

Un-xfailing cases in the GDB 7.5 test suite will follow.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@171699 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-07 05:55:03 +00:00
David Blaikie d8180cf987 PR14573: Unnamed parameters in debug info, Part 2
Catch some cases I'd missed in r171605 related to unnamed parameters of record
type. This resolves all remaining cases of PR14573 suppression in the GDB 7.5
test suite. Fix to the test suite to follow.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@171633 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-05 20:03:07 +00:00
David Blaikie 436653be0c Emit debug info for unnamed parameters.
LLVM ignores this data for now - patch for that to follow.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@171605 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-05 05:58:35 +00:00
Eric Christopher fd5ac0d75a Fix fieldNo usage for lambdas. No behavior change since the
field number was 0 anyhow.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@171472 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-04 17:59:07 +00:00
Chandler Carruth 3b844ba7d5 Rewrite #includes for llvm/Foo.h to llvm/IR/Foo.h as appropriate to
reflect the migration in r171366.

Re-sort the #include lines to reflect the new paths.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@171369 91177308-0d34-0410-b5e6-96231b3b80d8
2013-01-02 11:45:17 +00:00
Guy Benyei b13621d08e Re-commit r170428 changes with Linux style file endings.
Add OpenCL images as clang builtin types.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@170432 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-18 14:38:23 +00:00
Guy Benyei 7f92f2d8d9 Revert changes from r170428, as I accidentally changed the line endings of these files to Windows style.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@170431 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-18 14:30:41 +00:00
Guy Benyei 736104a761 Add OpenCL images as clang builtin types.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@170428 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-18 12:30:03 +00:00
David Blaikie c9a9177e69 Debug Info: Emit vtables pointer members as artificial.
I wasn't sure where to put the test case for this, but this seemed like as good
a place as any. I had to reorder the tests here to make them legible while
still matching the order of metadata output in the IR file (for some reason
making it virtual changed the ordering).

Relevant commit to fix up LLVM to actually respect 'artificial' member
variables is coming once I write up a test case for it.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@170154 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-13 22:29:06 +00:00
Bill Wendling 9d05986cc5 Use the 'count' attribute to calculate the upper bound of an array.
The count attribute is more accurate with regards to the size of an array. It
also obviates the upper bound attribute in the subrange. We can also better
handle an unbound array by setting the count to -1 instead of the lower bound to
1 and upper bound to 0.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@169311 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-04 21:33:58 +00:00
Chandler Carruth 55fc873017 Sort all of Clang's files under 'lib', and fix up the broken headers
uncovered.

This required manually correcting all of the incorrect main-module
headers I could find, and running the new llvm/utils/sort_includes.py
script over the files.

I also manually added quite a few missing headers that were uncovered by
shuffling the order or moving headers up to be main-module-headers.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@169237 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-04 09:13:33 +00:00
Bill Wendling 003ec237ad Add a 'count' field to the DWARF subrange.
The count field is necessary because there isn't a difference between the 'lo'
and 'hi' attributes for a one-element array and a zero-element array. When the
count is '0', we know that this is a zero-element array. When it's >=1, then
it's a normal constant sized array. When it's -1, then the array is unbounded.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@169219 91177308-0d34-0410-b5e6-96231b3b80d8
2012-12-04 06:21:27 +00:00
Fariborz Jahanian b15c8984ea objective-C blocks: Make sure that identical logic is used
in deciding a copy/dispose field is needed in a byref structure
and when generating the copy/dispose helpers. In certain
cases, these fields were being added but no copy/dispose was
being generated. This was uncovered in ARC, but not in MRR.
// rdar://12759433


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@168825 91177308-0d34-0410-b5e6-96231b3b80d8
2012-11-28 23:12:17 +00:00
Richard Smith 426391cd51 A step towards sorting out handling of triviality of special members in C++11.
Separate out the notions of 'has a trivial special member' and 'has a
non-trivial special member', and use them appropriately. These are not
opposites of one another (there might be no special member, or in C++11 there
might be a trivial one and a non-trivial one). The CXXRecordDecl predicates
continue to produce incorrect results, but do so in fewer cases now, and
they document the cases where they might be wrong.

No functionality changes are intended here (they will come when the predicates
start producing the right answers...).


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@168119 91177308-0d34-0410-b5e6-96231b3b80d8
2012-11-16 00:53:38 +00:00
Dmitri Gribenko c4a77906c2 Use empty parens for empty function parameter list instead of '(void)'.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@168041 91177308-0d34-0410-b5e6-96231b3b80d8
2012-11-15 14:28:07 +00:00
Fariborz Jahanian ccf57eab4e Fix 80-column violation.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@167932 91177308-0d34-0410-b5e6-96231b3b80d8
2012-11-14 17:27:27 +00:00
Fariborz Jahanian 3ca23d7dc6 objective-C blocks: Provide layout map for byref
variables captured in a block. // rdar://12184410



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@167931 91177308-0d34-0410-b5e6-96231b3b80d8
2012-11-14 17:15:51 +00:00
Eric Christopher 0c949efad5 Revert "Use the 'count' attribute instead of the 'upper_bound' attribute."
temporarily since it breaks the gdb bots.

This reverts commit r167807/30305bec25cac981c6d4a3b8be004401310a82a7.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@167887 91177308-0d34-0410-b5e6-96231b3b80d8
2012-11-13 23:30:57 +00:00
Bill Wendling 30305bec25 Use the 'count' attribute instead of the 'upper_bound' attribute.
If we have a type 'int a[1]' and a type 'int b[0]', the generated DWARF is the
same for both of them because we use the 'upper_bound' attribute. Instead use
the 'count' attrbute, which gives the correct number of elements in the array.
<rdar://problem/12566646>


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@167807 91177308-0d34-0410-b5e6-96231b3b80d8
2012-11-13 02:31:58 +00:00
Eli Friedman 7745786044 Put something sane in the DWARF offset field for bitfield ObjC ivars.
This is useful because unnamed bitfields can have effects on the
offsets which are not otherwise reflected in the DWARF information.

<rdar://problem/12629719>



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@167503 91177308-0d34-0410-b5e6-96231b3b80d8
2012-11-06 23:40:48 +00:00
David Blaikie 70ae1226d9 Emit debug info for C++ struct definitions as DW_TAG_structure_type (instead of class_type).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@167336 91177308-0d34-0410-b5e6-96231b3b80d8
2012-11-02 23:40:00 +00:00
David Blaikie 9417b05ef9 Fix debug tag type of forward declarations of struct/class in C++.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@167308 91177308-0d34-0410-b5e6-96231b3b80d8
2012-11-02 20:49:01 +00:00
Richard Smith 7edf9e38b9 Simplify: replace getContext().getLangOpts() with just getLangOpts().
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@167261 91177308-0d34-0410-b5e6-96231b3b80d8
2012-11-01 22:30:59 +00:00
Alexey Samsonov 34b41f80aa Initialize debug info for special cases of functions that lack declarations and are generated by Clang (global initializers/destructors, thunks) . Fixes PR13942.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@166676 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-25 10:18:50 +00:00
Douglas Gregor 4cdad3151b Switch CodeGenOptions over to a .def file, like we do with LangOptions.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@166497 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-23 20:05:01 +00:00
Eric Christopher 25dfaacde5 Fix up comment and invert order. Most simple check first.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@166240 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-18 22:08:02 +00:00
Eric Christopher da3301eec8 Add a new option for and disable column number information as there
are no known current users of column info. Robustify and fix up
a few tests in the process. Reduces the size of debug information
by a small amount.

Part of PR14106

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@166236 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-18 21:52:18 +00:00
Eric Christopher 9556b39109 Revert r158009 since there are some uses of artificial functions in
debug info.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@166109 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-17 17:37:17 +00:00
Eli Friedman 5f608aedb6 Make -mms-bitfields behave consistently.
Patch by Jeremiah Zanin.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@165849 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-12 23:29:20 +00:00
Micah Villmow cadaf4b16a Add in the first iteration of support for llvm/clang/lldb to allow variable per address space pointer sizes to be optimized correctly.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@165726 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-11 17:21:41 +00:00
Micah Villmow 25a6a84cf5 Move TargetData to DataLayout.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@165395 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-08 16:25:52 +00:00
Eli Friedman e6b39bcee0 Make sure to generate the right kind of MDNode for enum forward declarations.
PR14029, clang part.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@165289 91177308-0d34-0410-b5e6-96231b3b80d8
2012-10-05 01:49:33 +00:00
Eric Christopher 245d5a31e5 Mark the passed in "self" for a block as an object pointer so
that the backend can mark it as the representative pointer for
the block.

rdar://12001329

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@164418 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-21 22:18:42 +00:00
Eric Christopher 847665dc98 Grammar.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@164260 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-19 22:40:44 +00:00
Eric Christopher 20ec2c4d14 Update and expand comment.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@164254 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-19 22:01:42 +00:00
Eric Christopher 28e3c99825 Handle a captured this for the debug information as well.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@164253 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-19 21:47:34 +00:00
Eric Christopher 195ff58b91 Fix awkward comment.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@164252 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-19 21:47:29 +00:00
Eric Christopher d5a73dca62 Reapply:
Make clang emit a flag for DW_AT_object_pointer for the artificial
    args where it should (implicit first arguments). FileCheck-ize a
    test as well and update tests to take into account the object
    pointer flag.

    rdar://9797999

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163755 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-12 23:36:49 +00:00
Eric Christopher 22b617fbfd Revert "Make clang emit a flag for DW_AT_object_pointer for the artificial"
this should be done on the subprogram, not the variable.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163733 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-12 18:42:10 +00:00
Eric Christopher 2b6eb9db86 Make clang emit a flag for DW_AT_object_pointer for the artificial
args where it should (implicit first arguments). FileCheck-ize a
test as well and update tests to take into account the object
pointer flag.

rdar://9797999

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163668 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-12 00:27:32 +00:00
Eric Christopher 85f90bd579 Update comment and space.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163586 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-11 01:36:56 +00:00
Eric Christopher 3ed6b91378 The type of the self and cmd variables should be artificial. (Note
that the types aren't artificial the args are, but this is currently
represented by an artificial type.)

Found by inspection.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163585 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-11 01:36:54 +00:00
Roman Divacky 31ba613537 Dont cast away const needlessly. Found by gcc48 -Wcast-qual.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163325 91177308-0d34-0410-b5e6-96231b3b80d8
2012-09-06 15:59:27 +00:00
Joao Matos 17d35c36fb Normalize line endings of r163013 (part 2).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163032 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-31 22:18:20 +00:00
Joao Matos 6666ed4ed2 Improved MSVC __interface support by adding first class support for it, instead of aliasing to "struct" which had some incorrect behaviour. Patch by David Robins.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163013 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-31 18:45:21 +00:00
Eric Christopher bf3a96650c Reapply:
Author: Eric Christopher <echristo@apple.com>
Date:   Thu Aug 16 23:50:46 2012 +0000

    Add some caching here for the builtin types.

    rdar://12117935

    git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162066 91177308-0d34-0410-b5e6-96231b3b80d8

after fixing a thinko.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162243 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-20 23:32:17 +00:00
Eric Christopher 003e7569fd Reapply:
Make isa part of objc_object at metadata generation time.

Noticed on inspection.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162145 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-17 22:54:57 +00:00
Eric Christopher 1dc7ab0bbe Temporarily revert r162066 and r162062 to see if it brings the gdb
bots back.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162080 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-17 04:42:07 +00:00
Richard Smith e7259aad3f Fix undefined behavior in debug info emission: operator* on WeakVH returns a
reference, so &* on an empty WeakVH binds a reference to a dereferenced null
pointer. So don't do that; we have a perfectly good implicit conversion to
Value*.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162079 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-17 04:17:54 +00:00
Eric Christopher 8bf4ab319e Add some caching here for the builtin types.
rdar://12117935

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162066 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-16 23:50:46 +00:00
Eric Christopher c076ef6dd8 Make isa part of objc_object at metadata generation time.
Noticed on inspection.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@162062 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-16 23:50:35 +00:00
Eric Christopher 860de6b422 This is always going to be true so the cast isn't necessary.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@161744 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-13 02:07:42 +00:00
Eric Christopher c7fb748061 If we don't have a complete type for the array type yet either then
just let the alignment be zero.

PR13531

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@161379 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-07 00:48:43 +00:00
Eric Christopher d0a97c49c2 Remove some unintended changes from my last patch.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@161369 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-07 00:18:40 +00:00
Eric Christopher 363e5acfd9 Make sure when we get the replacement type for a template argument
that we attach the lost qualifiers.

Fixes rdar://11882155

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@161368 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-07 00:14:25 +00:00
Benjamin Kramer 65263b4ec1 Simplify code, no functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@161303 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-04 17:00:46 +00:00
Eric Christopher aa6eccce0c Fix the name of this variable.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@161287 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-04 00:11:22 +00:00
Eric Christopher 3e07881cdb Update comment to accurately reflect what should happen.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@161286 91177308-0d34-0410-b5e6-96231b3b80d8
2012-08-04 00:11:20 +00:00
Eric Christopher c852e9ff06 Temporarily revert this to see if it brings the gdb bot back.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@160049 91177308-0d34-0410-b5e6-96231b3b80d8
2012-07-11 15:32:13 +00:00
Eric Christopher 3d40f96394 The end of a block doesn't necessarily need a line table entry unless
there's something going on there. Remove the unconditional line entry
and only add one if we're emitting cleanups (any other statements
would be handled normally).

Fixes rdar://9199234

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@160033 91177308-0d34-0410-b5e6-96231b3b80d8
2012-07-11 01:49:26 +00:00
Benjamin Kramer d4f5198ae0 Remove get(V)BaseClassOffsetInBits, the CharUnit functions should be used instead.
No functionality change.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@159719 91177308-0d34-0410-b5e6-96231b3b80d8
2012-07-04 18:45:14 +00:00
Eric Christopher da970d2fe0 Fix grammar.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@159321 91177308-0d34-0410-b5e6-96231b3b80d8
2012-06-28 01:20:05 +00:00
Benjamin Kramer 527e616722 Don't circumvent the debug info type cache when emitting info for EnumConstantDecl.
CreateEnumType doesn't participate in caching so the descriptor for the enum
gets recomputed for every reference of an element of an enum, only to get
discarded when it gets turned into an MDNode.

No functionality change except performance.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@158832 91177308-0d34-0410-b5e6-96231b3b80d8
2012-06-20 18:11:18 +00:00
John McCall 260611a325 Restructure how the driver communicates information about the
target Objective-C runtime down to the frontend:  break this
down into a single target runtime kind and version, and compute
all the relevant information from that.  This makes it
relatively painless to add support for new runtimes to the
compiler.  Make the new -cc1 flag, -fobjc-runtime=blah-x.y.z,
available at the driver level as a better and more general
alternative to -fgnu-runtime and -fnext-runtime.  This new
concept of an Objective-C runtime also encompasses what we
were previously separating out as the "Objective-C ABI", so
fragile vs. non-fragile runtimes are now really modelled as
different kinds of runtime, paving the way for better overall
differentiation.

As a sort of special case, continue to accept the -cc1 flag
-fobjc-runtime-has-weak, as a sop to PLCompatibilityWeak.

I won't go so far as to say "no functionality change", even
ignoring the new driver flag, but subtle changes in driver
semantics are almost certainly not intended.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@158793 91177308-0d34-0410-b5e6-96231b3b80d8
2012-06-20 06:18:46 +00:00
Bill Wendling 645161f7f5 Remove unused variable.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@158353 91177308-0d34-0410-b5e6-96231b3b80d8
2012-06-12 06:53:25 +00:00
Michael J. Spencer 50e3faaebf [C++11 Compat] Fix breaking change in C++11 pair copyctor.
While this code is valid C++98, it is not valid C++11. The problem can be
reduced to:

class MDNode;

class DIType {
  operator MDNode*() const {return 0;}
};

class WeakVH {
  WeakVH(MDNode*) {}
};

int main() {
  DIType di;
  std::pair<void*, WeakVH> p(std::make_pair((void*)0, di)));
}

This was not detected by any of the bots we have because they either compile
C++98 with libstdc++ (which allows it), or C++11 with libc++ (which incorrectly
allows it). I ran into the problem when compiling with VS 2012 RC.

Thanks to Richard for explaining the issue.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@158245 91177308-0d34-0410-b5e6-96231b3b80d8
2012-06-08 23:47:12 +00:00
Benjamin Kramer 855243789c Plug a long standing memory leak in TemplateArgument.
The integral APSInt value is now stored in a decomposed form and the backing
store for large values is allocated via the ASTContext. This way its not
leaked as TemplateArguments are never destructed when they are allocated in
the ASTContext. Since the integral data is immutable it is now shared between
instances, making copying TemplateArguments a trivial operation.

Currently getting the integral data out of a TemplateArgument requires creating
a new APSInt object. This is cheap when the value is small but can be expensive
if it's not. If this turns out to be an issue a more efficient accessor could
be added.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@158150 91177308-0d34-0410-b5e6-96231b3b80d8
2012-06-07 15:09:51 +00:00
David Blaikie 581deb3da4 Revert Decl's iterators back to pointer value_type rather than reference value_type
In addition, I've made the pointer and reference typedef 'void' rather than T*
just so they can't get misused. I would've omitted them entirely but
std::distance likes them to be there even if it doesn't use them.

This rolls back r155808 and r155869.

Review by Doug Gregor incorporating feedback from Chandler Carruth.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@158104 91177308-0d34-0410-b5e6-96231b3b80d8
2012-06-06 20:45:41 +00:00
Eric Christopher 3de00ce907 Reapply "Only emit debug information for methods that are user defined, there's"
As the failing testcase has been fixed.

This reverts commit 0637f407e6.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@158009 91177308-0d34-0410-b5e6-96231b3b80d8
2012-06-05 18:16:22 +00:00
John McCall 0637f407e6 Revert "Only emit debug information for methods that are user defined, there's"
This reverts r157970, which was not passing on
  clang-x86_64-darwin10-nobootstrap-RA

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@157983 91177308-0d34-0410-b5e6-96231b3b80d8
2012-06-05 06:10:39 +00:00
Eric Christopher 9b26efe7b6 Only emit debug information for methods that are user defined, there's
not much reason to emit for constructors and destructors that aren't
user defined.

rdar://11593099

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@157970 91177308-0d34-0410-b5e6-96231b3b80d8
2012-06-05 00:15:06 +00:00
Eric Christopher 5a2eff85d1 Support C++11 enum forward declarations.
Part of rdar://11570854

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@157787 91177308-0d34-0410-b5e6-96231b3b80d8
2012-06-01 00:22:57 +00:00
Eric Christopher 9ee5f4641e Emit C++11 enum class information if it exists.
Part of rdar://11496790

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@157304 91177308-0d34-0410-b5e6-96231b3b80d8
2012-05-23 00:09:47 +00:00
Eric Christopher e6d11975d7 Revert r115805. An array type is required to have a range type,
however, the range can be unknown for the upper bound.

Testcase to follow.

Part of rdar://11457152

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@157212 91177308-0d34-0410-b5e6-96231b3b80d8
2012-05-21 22:13:23 +00:00
Eric Christopher 37e4cea0f5 Update API usage for llvm DIBuilder changes for rvalue reference
types and ensure we are actually creating the type.

rdar://11479676

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@157095 91177308-0d34-0410-b5e6-96231b3b80d8
2012-05-19 01:36:50 +00:00
Eric Christopher d9f07d45f1 Remove unnecessary temporary.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@156953 91177308-0d34-0410-b5e6-96231b3b80d8
2012-05-16 22:02:36 +00:00
Eric Christopher a135f2ca67 The address of a vla is actually complex and requires a dereference.
Part of rdar://11352000

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@156407 91177308-0d34-0410-b5e6-96231b3b80d8
2012-05-08 18:56:47 +00:00
Eric Christopher 3a89bfbeed Whitespace.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@156406 91177308-0d34-0410-b5e6-96231b3b80d8
2012-05-08 18:56:42 +00:00
Argyrios Kyrtzidis 27a00970bf Make BuiltinType::getName return a StringRef and introduce BuiltinType::getNameAsCString
to get a const char* if necessary.

This avoids unnecessary conversions when we want to use the result of getName as
a StringRef.

Part of rdar://10796159

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@156227 91177308-0d34-0410-b5e6-96231b3b80d8
2012-05-05 04:20:28 +00:00
Alexey Samsonov fd00eecad6 This patch adds a new Clang compiler flag "-gline-tables-only".
It reduces the amount of emitted debug information:
1) DIEs in .debug_info have types DW_TAG_compile_unit, DW_TAG_subprogram,
DW_TAG_inlined_subroutine (for opt builds) and DW_TAG_lexical_block only.
2) .debug_str contains only function names.
3) No debug data for types/namespaces/variables is emitted.
4) The data in .debug_line is enough to produce valid stack traces with
function names and line numbers.

Reviewed by Eric Christopher.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@156160 91177308-0d34-0410-b5e6-96231b3b80d8
2012-05-04 07:39:27 +00:00
David Blaikie 262bc18e32 Remove the ref/value inconsistency in filter_decl_iterator.
filter_decl_iterator had a weird mismatch where both op* and op-> returned T*
making it difficult to generalize this filtering behavior into a reusable
library of any kind.

This change errs on the side of value, making op-> return T* and op* return
T&.

(reviewed by Richard Smith)

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@155808 91177308-0d34-0410-b5e6-96231b3b80d8
2012-04-30 02:36:29 +00:00
Alexey Samsonov 3a70cd6e1c Use enum to set debug info size generated by Clang
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@155697 91177308-0d34-0410-b5e6-96231b3b80d8
2012-04-27 07:24:20 +00:00
Eric Christopher 87380aaf42 Forward declarations should take a context. This helps the debugger
find forward declarations in the context that the actual definition
will occur.

rdar://11291658

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@155381 91177308-0d34-0410-b5e6-96231b3b80d8
2012-04-23 19:00:24 +00:00
Benjamin Kramer c6b468e46d Avoid string thrashing when we can concatenate them in the final buffer.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@154678 91177308-0d34-0410-b5e6-96231b3b80d8
2012-04-13 18:00:37 +00:00
Eric Christopher 43443de48b static functions have a need for mangled name debug information too.
The mangler doesn't like non-prototyped functions so only use a mangled
name for prototyped functions.

rdar://11079003

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@154570 91177308-0d34-0410-b5e6-96231b3b80d8
2012-04-12 00:35:06 +00:00
Eric Christopher be6c6869a9 Enable debug info for objective c implementations that may not have
an explicit instance variable.

rdar://10590352

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@154481 91177308-0d34-0410-b5e6-96231b3b80d8
2012-04-11 05:56:05 +00:00
Eric Christopher 78af8fd568 Only emit the getter and setter names if they're not the default
synthesized ones. Reasonable debug info size reduction for objc.

rdar://11179756

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@154129 91177308-0d34-0410-b5e6-96231b3b80d8
2012-04-05 22:03:32 +00:00
Eric Christopher ea32047660 Change location information for synthesized properties to be at the
property file/line rather than the @synthesize file/line. Avoids
some nasty confusing-ness with conflating the file from the scope
and the line from the original declaration. Use    the current scope
location as a separate parameter so that we can    match it up
better in the line table with the beginning of the scope.

Update a couple of testcases accordingly since I had to change
that we actually use the passed in location in EmitFunctionStart
and for the new metadata parameter and add a new testcase to
make sure we've got the right line numbers for synthesized
properties.

Part of rdar://11026482

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@153917 91177308-0d34-0410-b5e6-96231b3b80d8
2012-04-03 00:44:15 +00:00
Eric Christopher 96579c43e7 Revert previous commit changing location information to see if this
is causing the gdb test failures on the bots.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@153727 91177308-0d34-0410-b5e6-96231b3b80d8
2012-03-30 05:42:12 +00:00
Eric Christopher 7435054a96 Change location information for synthesized properties to be at the
property file/line rather than the @synthesize file/line. Avoids
some nasty confusing-ness with conflating the file from the scope
and the line from the original declaration.

Update a couple of testcases accordingly since I had to change
that we actually use the passed in location in EmitFunctionStart.

Fixes rdar://11026482

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@153714 91177308-0d34-0410-b5e6-96231b3b80d8
2012-03-30 01:07:48 +00:00
Eric Christopher ecae5965cf Go back to using just the selector name for the getter and setter
in the property debug info. Any more isn't necessary after all.

rdar://11144023

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@153659 91177308-0d34-0410-b5e6-96231b3b80d8
2012-03-29 17:31:33 +00:00
Eric Christopher 51c0371816 Add support for objc property decls according to the page at:
http://llvm.org/docs/SourceLevelDebugging.html#objcproperty

    including type and DECL. Expand the getter and setter names
    into the fully qualified names.

    rdar://11144023

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@153640 91177308-0d34-0410-b5e6-96231b3b80d8
2012-03-29 08:43:37 +00:00
Benjamin Kramer 7e42392eb2 Simplify some users of DenseMap::erase.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@153389 91177308-0d34-0410-b5e6-96231b3b80d8
2012-03-24 18:22:12 +00:00
Eric Christopher 451b441454 Update comment.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@153149 91177308-0d34-0410-b5e6-96231b3b80d8
2012-03-20 23:28:32 +00:00
Benjamin Kramer 6181e56a44 Debug info: Tighten up uses of plain MDNode pointers which don't survive replaceOperandWith.
TrackingVH notices when it gets RAUW'd. Fixes PR12305 and PR12315.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@153115 91177308-0d34-0410-b5e6-96231b3b80d8
2012-03-20 19:49:14 +00:00
Eric Christopher 167174518c Add support to mangle templated member function names with template
args.

Fixes rdar://11042577

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@152691 91177308-0d34-0410-b5e6-96231b3b80d8
2012-03-14 00:25:46 +00:00
Eric Christopher 3b10cfe6b8 When adding member functions to a class add any specializations of
function templates as well.

A future commit will mangle the added name with the template args
like classes are mangled.

Fixes rdar://10986010

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@152683 91177308-0d34-0410-b5e6-96231b3b80d8
2012-03-13 23:40:48 +00:00
David Blaikie 4e4d08403c Unify naming of LangOptions variable/get function across the Clang stack (Lex to AST).
The member variable is always "LangOpts" and the member function is always "getLangOpts".

Reviewed by Chris Lattner

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@152536 91177308-0d34-0410-b5e6-96231b3b80d8
2012-03-11 07:00:24 +00:00
Eric Christopher ad8de5142a Reapply r151702 with a small fix for a failure to cut and paste
correctly.

Still rdar://10900684

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151838 91177308-0d34-0410-b5e6-96231b3b80d8
2012-03-01 21:36:52 +00:00
Daniel Dunbar 956ecbd2c8 Revert r151702, "Add support for handling captured variables in lambda debug
info.", which broke some -O0 -g tests.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151730 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-29 16:28:29 +00:00
Eric Christopher 0a0714ddd3 Add support for handling captured variables in lambda debug info.
This currently doesn't handle capturing the 'this' pointer for any
enclosing class.

Steal the lambda-expressions.cpp testcase and debugify it and try
to use more variables to proof it against random changes.

Part of rdar://10900684

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151702 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-29 03:25:30 +00:00
Eric Christopher af3db7d9e4 ObjcInterfaceTypes are also complete types for the type cache.
Fixes rdar://10934887

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151519 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-27 08:23:23 +00:00
Eric Christopher b45cfead07 Add a quick TODO.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151217 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-23 00:43:12 +00:00
Eric Christopher e86b9eaccd Formatting.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150996 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-20 23:02:36 +00:00
Eric Christopher 86211df4d2 Remove the type retaining from the clang frontend. This is now
handled by the caching and rauw. Also fix one cache that wasn't
being added to highlighted by this patch. Update all testcases
accordingly.

This should fix the deall failure.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150977 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-20 18:05:24 +00:00
Eric Christopher 917bc8d55e Make forward declarations for objective-c types use the new
temporary forward declaration nodes. Fixes a problem building
Chrome.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150976 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-20 18:05:04 +00:00
Eric Christopher 7ff0c5d30d Add in a caching mechanism so that forward declarations are replaced
with full types if they exist.

rdar://10809898 and rdar://10209967 and rdar://10400981

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150858 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-18 00:50:17 +00:00
Eric Christopher 1486d2c5d7 Formatting.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150857 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-18 00:50:14 +00:00
Eric Christopher 51b2f6bae6 Remove UpdateCompletedType from the debug info emission. We now
emit less than complete types on purpose on occasion and so
our caches aren't useful for this kind of lazy emitting.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150856 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-18 00:50:08 +00:00
Eric Christopher 1e009d5943 Index "12" holds the vtable, not "9".
Fixes lots of gdb testsuite failures.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150797 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-17 07:09:48 +00:00
Eric Christopher 9965deaad4 Reapply r150631:
"Add a completed/incomplete type difference. This allows us to have
    partial types for contexts and forward decls while allowing us to
    complete types later on for debug purposes.

    This piggy-backs on the metadata replacement and rauw changes
    for temporary nodes and takes advantage of the incremental
    support I added in earlier. This allows us to, if we decide,
    to limit adding methods and variables to structures in order
    to limit the amount of debug information output into a .o file.

    The caching is a bit complicated though so any thoughts on
    untangling that are welcome."

with a fix:

 - Remove all RAUW during type construction by adding stub versions
   of types that we later complete.

and some TODOs:

 - Add an RAUW cache for forward declared types so that we can replace
   them at the end of compilation.
 - Remove the code that updates on completed types because we no
   longer need to have that happen. We emit incomplete types on
   purpose and only want to know when we want to complete them.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150752 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-16 22:54:45 +00:00
Eric Christopher 64a0430458 Revert "Add a completed/incomplete type difference. This allows us to have"
This reverts commit 9a68d4584a.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150637 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-15 23:51:20 +00:00
Eric Christopher 9a68d4584a Add a completed/incomplete type difference. This allows us to have
partial types for contexts and forward decls while allowing us to
complete types later on for debug purposes.

This piggy-backs on the metadata replacement and rauw changes
for temporary nodes and takes advantage of the incremental
support I added in earlier. This allows us to, if we decide,
to limit adding methods and variables to structures in order
to limit the amount of debug information output into a .o file.

The caching is a bit complicated though so any thoughts on
untangling that are welcome.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150631 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-15 23:25:18 +00:00
Eric Christopher e88a71f00e Add back in the code to create forward decls using temporary mdnodes.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150390 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-13 15:08:45 +00:00
Eric Christopher 42e75daaef Temporarily walk back a few of my recent debug info limiting changes
while reworking how we handle wanting to emit only parts of structures.

Fixes PR11970.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150388 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-13 14:56:11 +00:00
Eric Christopher 3b8e197bbf Don't cache the artificial type for the this pointer, there's no
difference in the qual type. This is a workaround for the fact that
the type isn't artificial but the this decl is, however, we don't
have any way of representing it in the current metadata. For now,
however, just don't cache the full type.

Fixes rdar://10831526 and probably a couple of others.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@150159 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-09 07:26:21 +00:00