Commit Graph

1260 Commits

Author SHA1 Message Date
Yaxun Liu 427517d100 [OpenCL] Generate opaque type for sampler_t and function call for the initializer
Currently Clang use int32 to represent sampler_t, which have been a source of issue for some backends, because in some backends sampler_t cannot be represented by int32. They have to depend on kernel argument metadata and use IPA to find the sampler arguments and global variables and transform them to target specific sampler type.

This patch uses opaque pointer type opencl.sampler_t* for sampler_t. For each use of file-scope sampler variable, it generates a function call of __translate_sampler_initializer. For each initialization of function-scope sampler variable, it generates a function call of __translate_sampler_initializer.

Each builtin library can implement its own __translate_sampler_initializer(). Since the real sampler type tends to be architecture dependent, allowing it to be initialized by a library function simplifies backend design. A typical implementation of __translate_sampler_initializer could be a table lookup of real sampler literal values. Since its argument is always a literal, the returned pointer is known at compile time and easily optimized to finally become some literal values directly put into image read instructions.

This patch is partially based on Alexey Sotkin's work in Khronos Clang (3d4eec6162).

Differential Revision: https://reviews.llvm.org/D21567

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@277024 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-28 19:26:30 +00:00
Adrian McCarthy 3707e21d19 Reroll "Include unreferenced nested types in member list only for CodeView"
Another attempt at r276271, hopefully without breaking ModuleDebugInfo test.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@276317 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-21 18:43:20 +00:00
Adrian McCarthy 9025b9aa4e Revert "Include unreferenced nested types in member list only for CodeView"
Patch broke ModuleDebugInfo test on the build bots (but not locally).  Again.

svn revision:  r276271

This reverts commit 9da8a1b05362bc96f2855fb32b5588b89407685d.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@276279 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-21 13:41:25 +00:00
Adrian McCarthy 86087031da Include unreferenced nested types in member list only for CodeView
Unreferenced nested structs and classes were omitted from the debug info.  In DWARF, this was intentional, to avoid bloat.  But for CodeView, we want this information to be consistent with what Microsoft tools would produce and expect.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@276271 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-21 13:16:14 +00:00
David Majnemer 8a9100c973 [CodeGen] Some assorted cleanups
No functional change, just some cleanups:
- Use auto when it is appropriate.
- There were some strange static_casts which were superfluous.
- Use range-based for loops when appropriate.
- The dyn_cast_or_null construct was used when null was impossible.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@275699 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-17 00:39:12 +00:00
David Majnemer ce09fec7c1 [AST] Use ArrayRef in more interfaces
ArrayRef is a little better than passing around a pointer/length
pair.

No functional change is intended.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@274732 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-07 04:43:07 +00:00
Adrian McCarthy a9119fb208 Revert "Retry "Include debug info for nested structs and classes""
Reverting because it causes a test failure on build bots (Modules/ModuleDebugInfo.cpp).  Failure does not reproduce locally.

svn revision: rL274698

This reverts commit 3c5ed6599b086720aab5b8bd6941149d066806a6.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@274706 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-06 23:28:34 +00:00
Adrian McCarthy cf47a1af9d Retry "Include debug info for nested structs and classes"
This should work now that the LLVM-side of the change has landed successfully.

Original Differential Revision: http://reviews.llvm.org/D21705

This reverts commit a30322e861.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@274698 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-06 22:39:15 +00:00
David Majnemer ceeab35758 [CodeGen, DebugInfo] Use hasLocalLinkage instead of hasInternalLinkage
For the purpose of emitting debug info, entities with private linkage
should be treated the same as internal linkage.  While this doesn't
change anything in practice, it makes the code a little less confusing.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@274677 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-06 21:07:53 +00:00
Adrian McCarthy a30322e861 Revert "Include debug info for nested structs and classes"
This reverts commit 0af5ee9631c7c167dc40498b415876553e314c95.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@274633 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-06 15:15:38 +00:00
Adrian McCarthy b8adec3cc6 Include debug info for nested structs and classes
This includes nested types in the member list, even if there are no members of that type. Note that structs and classes have themselves as an "implicit struct" as the first member, so we skip implicit ones.

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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@274628 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-06 14:46:42 +00:00
David Majnemer 425312c448 [CodeView] Include MSVC style names for unnamed types
The CodeView printer expects to be able to generate fully qualified
names from the debug info graph.  This means that we need to include the
MSVC-style name in the debug info for anonymous types.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@274401 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-01 23:12:54 +00:00
Reid Kleckner dc7857b421 [DebugInfo] Set DISubprogram ThisAdjustment in the MS ABI
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@274326 91177308-0d34-0410-b5e6-96231b3b80d8
2016-07-01 02:41:25 +00:00
Reid Kleckner 007ae0afb8 [codeview] Emit qualified display names if -gline-tables-only is on
When -gmlt is on, we don't emit namespace or class scope information,
and the CodeView emission code in LLVM can't compute the fully qualified
name. If we know LLVM won't be able to get the name right, go ahead and
emit the qualified name in the frontend.

We could change our -gmlt emission strategy to include those scopes when
emitting codeview, but that would increase memory usage and slow down
LTO and add more complexity to debug info emission.

The same problem exists when you debug a -gmlt binary with GDB, so we
should consider removing '&& EmitCodeView' from the condition here at
some point in the future after evaluating the impact on object file
size.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@274246 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-30 17:41:31 +00:00
Nikolay Haustov d8d4937595 AMDGPU: Set amdgpu_kernel calling convention for OpenCL kernels.
Summary:
Summary:
Change Clang calling convention SpirKernel to OpenCLKernel.
Set calling convention OpenCLKernel for amdgcn as well.
Add virtual method .getOpenCLKernelCallingConv() to TargetCodeGenInfo
and use it to set target calling convention for AMDGPU and SPIR.
Update tests.

Reviewers: rsmith, tstellarAMD, Anastasia, yaxunl

Subscribers: kzhuravl, cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@274220 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-30 09:06:33 +00:00
David Majnemer c790970bb0 [CodeView] Implement support for bitfields in Clang
Emit the underlying storage offset in addition to the starting bit
position of the field.

This fixes PR28162.

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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@274201 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-30 03:01:59 +00:00
David Majnemer ba5c7ce848 Use more ArrayRefs
No functional change is intended, just a small refactoring.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@273647 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-24 04:05:48 +00:00
Reid Kleckner f6e13ce923 [codeview] Set the new IntroducedVirtual debug info flag
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@273454 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-22 18:34:45 +00:00
Pirama Arumuga Nainar b4fa826a03 Emit the DWARF tag for the RenderScript language
Summary:
If the RenderScript LangOpt is set, either via '-x renderscript' or the '.rs'
file extension, set the DWARF language tag to be that of RenderScript.

Reviewers: rsmith

Subscribers: cfe-commits, srhines

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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@273321 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-21 21:35:11 +00:00
Reid Kleckner 86fd3a3f3f [MS] Put member pointer representation flags in our debug info
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@273063 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-17 22:27:59 +00:00
Reid Kleckner f42cc8a737 [codeview] Stop emitting fully qualified subprogram display names
This effectively reverts r255744, and leaves the printing option tweaks.

We can add the name qualifiers easily in the backend.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@273008 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-17 16:11:20 +00:00
Reid Kleckner a75f8f56bc [DebugInfo] Put the vftable index in the debug info
This won't always be enough info to call a virtual method from the
debugger, but it's a start.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@272944 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-16 20:08:51 +00:00
Reid Kleckner 7b5a49b699 [DebugInfo] Enable generation of unique identifiers for externally visible MS ABI types
We implemented the mangling for this a long time ago.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@272862 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-16 01:21:28 +00:00
Paul Robinson 638e14bd75 Allow 'nodebug' on local variables.
Parameters and non-static members of aggregates are still excluded,
and probably should remain that way.

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


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@272859 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-16 00:42:36 +00:00
Reid Kleckner bb80708b39 [DebugInfo] Add calling conventions to DISubroutineType
Summary:
This should have been a very simple change, but it was greatly
complicated by the construction of new Decls during IR generation.

In particular, we reconstruct the AST function type in order to get the
implicit 'this' parameter into C++ method types.

We also have to worry about FunctionDecls whose types are not
FunctionTypes because CGBlocks.cpp constructs some dummy FunctionDecls
with 'void' type.

Depends on D21114

Reviewers: aprantl, dblaikie

Subscribers: cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@272198 91177308-0d34-0410-b5e6-96231b3b80d8
2016-06-08 20:41:54 +00:00
Nemanja Ivanovic fa54202263 Enable support for __float128 in Clang and enable it on pertinent platforms
This patch corresponds to reviews:
http://reviews.llvm.org/D15120
http://reviews.llvm.org/D19125

It adds support for the __float128 keyword, literals and target feature to
enable it. Based on the latter of the two aforementioned reviews, this feature
is enabled on Linux on i386/X86 as well as SystemZ.
This is also the second attempt in commiting this feature. The first attempt
did not enable it on required platforms which caused failures when compiling
type_traits with -std=gnu++11.

If you see failures with compiling this header on your platform after this
commit, it is likely that your platform needs to have this feature enabled.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@268898 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-09 08:52:33 +00:00
David Blaikie 6bd4c225fc [modules][debuginfo] Only include imported modules when targeting LLDB
These constructs are only applicable to a debugger capable of loading a
Clang AST, so omit them for brevity when not doing so.

We could potentially propagate more of CodeGenOptions through the
ObjectFilePCGContainerOperations for consistency (so the next person who
adds some CodeGenOpts feature that tweaks debug info output doesn't get
caught by this), so I'm open to objections/alternatives there, but went
with this for now.

Tested just a couple of basic cases (one direct, one indirect (through
the ObjectFilePCHContainerOperations) & fixed up other cases to pass the
-debugger-tuning flag as appropriate.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@268460 91177308-0d34-0410-b5e6-96231b3b80d8
2016-05-03 23:06:40 +00:00
Amjad Aboud fc653e4afa Reverting 268055 as it caused PR27579.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@268151 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-30 01:44:38 +00:00
Amjad Aboud e77a677c97 Recommitted r264281 "Supporting all entities declared in lexical scope in LLVM debug info."
After fixing PR26942 in r267004.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@268055 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-29 16:08:08 +00:00
Paul Robinson a4cbc2e04b PR21823: 'nodebug' attribute on global/static variables.
Make 'nodebug' on a global/static variable suppress all debug info
for the variable. Previously it would only suppress info for the
associated initializer function, if any.

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


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@267746 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-27 17:37:12 +00:00
Adrian Prantl 82e0435b8b Module debugging: Add an assertion.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@267633 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-26 23:42:43 +00:00
Adrian Prantl 2e58709f44 Module debugging: Also correctly handle typedef'd foward-declared members.
Thanks again to Richard Smith for pointing this out.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@267630 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-26 23:37:38 +00:00
Adrian Prantl 3cb9485016 Module debugging: Use the definition to determine module-defined types.
Follow-up to r267464. Thanks to Richard Smith for pointing this out!

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@267611 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-26 21:58:18 +00:00
Adrian Prantl 15a13f4ca1 Module Debugging: Fix the condition for determining whether a template
instantiation is in a module.

This patch fixes the condition for determining whether the debug info for a
template instantiation will exist in an imported clang module by:

- checking whether the ClassTemplateSpecializationDecl is complete and
- checking that the instantiation was in a module by looking at the first field.

I also added a negative check to make sure that a typedef to a forward-declared
template (with the definition outside of the module) is handled correctly.

http://reviews.llvm.org/D19443
rdar://problem/25553724

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@267464 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-25 20:52:40 +00:00
Duncan P. N. Exon Smith 4a0e8aa964 DebugInfo: Adapt to loss of DITypeRef in LLVM r267296
LLVM stopped using MDString-based type references, and DIBuilder no
longer fills 'retainedTypes:' with every DICompositeType that has an
'identifier:' field.   There are just minor changes to keep the same
behaviour in CFE.

Leaving 'retainedTypes:' unfilled has a dramatic impact on the output
order of the IR though.  There are a huge number of testcase changes,
which were unfortunately not really scriptable.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@267297 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-23 21:08:27 +00:00
Adrian Prantl 29dbb7b242 Module Debugging: Emit the canonical debug info for Objective-C classes
in the compile unit that contains their implementation even if their
interface is declared in a module.

The private @implementation of an @interface may have additional
hidden ivars so we should not defer to the public version of the
type that is found in the module.

<rdar://problem/25541798>

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@266937 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-20 23:59:32 +00:00
Adrian Prantl be9791a278 [ObjC++] Fix crash when emitting debug info for a block member capturing this.
rdar://problem/23871824

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@266698 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-18 23:48:16 +00:00
Duncan P. N. Exon Smith 70fae264e3 DebugInfo: Make DICompositeTypes distinct most of the time
Since elements of most kinds of DICompositeType have back references,
most are involved in uniquing cycles.  Except via the ODR 'identifier:'
field, which doesn't care about the storage type (see r266549),
they have no hope of being uniqued.

Distinct nodes are far more efficient, so use them for most kinds of
DICompositeType definitions (i.e., when DIType::isForwardDecl is false).
The exceptions:

  - DW_TAG_array_type, since their elements never have back-references
    and they never have ODR 'identifier:' fields;

  - DW_TAG_enumeration_type when there is no ODR 'identifier:' field,
    since their elements usually don't have back-references.

This breaks the last major uniquing cycle I'm aware of in the debug info
graph.  The impact won't be enormous for C++ because references to
ODR-uniqued nodes still use string-based DITypeRefs; but this should
prevent a regression in C++ when we drop the string-based references.

This wouldn't have been reasonable until r266549, when composite types
stopped relying on being uniqued by structural equivalence to prevent
blow-ups at LTO time.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@266556 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-17 07:45:08 +00:00
Nemanja Ivanovic c74bb5e707 Revert 266186 as it breaks anything that includes type_traits on some platforms
Since this patch provided support for the __float128 type but disabled it
on all platforms by default, some platforms can't compile type_traits with
-std=gnu++11 since there is a specialization with __float128.
This reverts the patch until D19125 is approved (i.e. we know which platforms
need this support enabled).


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@266460 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-15 18:04:13 +00:00
Adrian Prantl 92e0abcf10 Update to match LLVM changes for PR27284.
(Reverse the ownership between DICompileUnit and DISubprogram.)

http://reviews.llvm.org/D19034
<rdar://problem/25256815>

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@266445 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-15 15:55:45 +00:00
Nemanja Ivanovic b2ea6d9a87 Enable support for __float128 in Clang
This patch corresponds to review:
http://reviews.llvm.org/D15120

It adds support for the __float128 keyword, literals and a target feature to
enable it. This support is disabled by default on all targets and any target
that has support for this type is free to add it.

Based on feedback that I've received from target maintainers, this appears to
be the right thing for most targets. I have not heard from the maintainers of
X86 which I believe supports this type. I will subsequently investigate the
impact of enabling this on X86.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@266186 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-13 09:49:45 +00:00
Alexey Bader 4f328fe1eb [OpenCL] Move OpenCLImageTypes.def from clangAST to clangBasic library.
Putting OpenCLImageTypes.def to clangAST library violates layering requirement: "It's not OK for a Basic/ header to include an AST/ header".
This fixes the modules build.

Differential revision: http://reviews.llvm.org/D18954
Reviewers: Richard Smith, Vassil Vassilev.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@266180 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-13 08:33:41 +00:00
David Blaikie 2ff889ba1c Add a fixme for an old patch I had lying around that I'm not going to finish any time so n
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@266127 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-12 21:22:48 +00:00
Adrian Prantl cc8e531a17 Use NoDebug compile units to mark debug metadata used only for sample-based
profiling and optimization remarks and indicate that no debug info shall
be emitted for these compile units.

http://reviews.llvm.org/D18808
<rdar://problem/25427165>

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@265862 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-08 22:43:06 +00:00
Saleem Abdulrasool fdc51a5580 revert SVN r265702, r265640
Revert the two changes to thread CodeGenOptions into the TargetInfo allocation
and to fix the layering violation by moving CodeGenOptions into Basic.
Code Generation is arguably not particularly "basic".  This addresses Richard's
post-commit review comments.  This change purely does the mechanical revert and
will be followed up with an alternate approach to thread the desired information
into TargetInfo.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@265806 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-08 16:52:00 +00:00
Alexey Bader aa8b893ccd [OpenCL] Complete image types support.
I. Current implementation of images is not conformant to spec in the following points:
  1. It makes no distinction with respect to access qualifiers and therefore allows to use images with different access type interchangeably. The following code would compile just fine:

        void write_image(write_only image2d_t img);
        kernel void foo(read_only image2d_t img) { write_image(img); } // Accepted code

     which is disallowed according to s6.13.14.

  2. It discards access qualifier on generated code, which leads to generated code for the above example:

        call void @write_image(%opencl.image2d_t* %img);

     In OpenCL2.0 however we can have different calls into write_image with read_only and wite_only images.
     Also generally following compiler steps have no easy way to take different path depending on the image access: linking to the right implementation of image types, performing IR opts and backend codegen differently.

  3. Image types are language keywords and can't be redeclared s6.1.9, which can happen currently as they are just typedef names.
  4. Default access qualifier read_only is to be added if not provided explicitly.

II. This patch corrects the above points as follows:
  1. All images are encapsulated into a separate .def file that is inserted in different points where image handling is required. This avoid a lot of code repetition as all images are handled the same way in the code with no distinction of their exact type.
  2. The Cartesian product of image types and image access qualifiers is added to the builtin types. This simplifies a lot handling of access type mismatch as no operations are allowed by default on distinct Builtin types. Also spec intended access qualifier as special type qualifier that are combined with an image type to form a distinct type (see statement above - images can't be created w/o access qualifiers).
  3. Improves testing of images in Clang.

Author: Anastasia Stulova
Reviewers: bader, mgrang.
Subscribers: pxli168, pekka.jaaskelainen, yaxunl.
Differential Revision: http://reviews.llvm.org/D17821


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@265783 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-08 13:40:33 +00:00
Saleem Abdulrasool 8cca4d7cdf Basic: move CodeGenOptions from Frontend
This is a mechanical move of CodeGenOptions from libFrontend to libBasic.  This
fixes the layering violation introduced earlier by threading CodeGenOptions into
TargetInfo.  It should also fix the modules based self-hosting builds.  NFC.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@265702 91177308-0d34-0410-b5e6-96231b3b80d8
2016-04-07 17:49:44 +00:00
Adrian Prantl e6cf094aca Adapt to LLVM API change in r265077.
EmissionKind moved from DIBuilder to DICompileUnit.


<rdar://problem/25427165>

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@265078 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-31 23:57:45 +00:00
Reid Kleckner 8b87c36af7 Revert "Recommitted r263425 "Supporting all entities declared in lexical scope in LLVM debug info." After fixing PR26942 (the fix is included in this commit)."
This reverts commit r264281.

This change breaks building Chromium for iOS. We'll upload a reproducer
to the PR soon.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@264333 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-24 20:38:43 +00:00
Amjad Aboud d61d80aa4b Recommitted r263425 "Supporting all entities declared in lexical scope in LLVM debug info."
After fixing PR26942 (the fix is included in this commit).

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


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@264281 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-24 13:30:41 +00:00
Benjamin Kramer 6295c65c95 Revert "Recommitted r261634 "Supporting all entities declared in lexical scope in LLVM debug info." After fixing PR26715 at r263379."
This reverts commit r263425. Breaks self-host.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@263436 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-14 14:58:28 +00:00
Amjad Aboud 00560a2175 Recommitted r261634 "Supporting all entities declared in lexical scope in LLVM debug info."
After fixing PR26715 at r263379.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@263425 91177308-0d34-0410-b5e6-96231b3b80d8
2016-03-14 12:03:55 +00:00
Adrian Prantl 544b2b7bba Reapply r261657.
Remove an unnecessary workaround introduced in r259975. (NFC)

Now that LLVM r259973 allows replacing a temporary type with another
temporary we can rely on the original implementation.

It is possible for enums to be created as part of
their own declcontext. In this case a FwdDecl will be created
twice. This doesn't cause a problem because both FwdDecls are
entered into the ReplaceMap: finalize() will replace the first
FwdDecl with the second and then replace the second with
complete type.

Thanks to echristo for pointing this out.


# Conflicts:
#	lib/CodeGen/CGDebugInfo.cpp

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@261673 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-23 19:30:08 +00:00
Hans Wennborg 70fc525679 Revert r261634 "Supporting all entities declared in lexical scope in LLVM debug info." and r261657
r261634 and r261633 seems to have caused PR26715. r261657 depends on the former two.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@261670 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-23 19:10:16 +00:00
Adrian Prantl c473d6dc33 Remove an unnecessary workaround introduced in r259975. (NFC)
Now that LLVM r259973 allows replacing a temporary type with another
temporary we can rely on the original implementation.

It is possible for enums to be created as part of
their own declcontext. In this case a FwdDecl will be created
twice. This doesn't cause a problem because both FwdDecls are
entered into the ReplaceMap: finalize() will replace the first
FwdDecl with the second and then replace the second with
complete type.

Thanks to echristo for pointing this out.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@261657 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-23 17:13:47 +00:00
Amjad Aboud 8f2107d166 Supporting all entities declared in lexical scope in LLVM debug info.
Differential Revision: http://reviews.llvm.org/D15977

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@261634 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-23 13:37:18 +00:00
Adrian Prantl edfe68550c Use llvm::TempDIScope instead of manually deleting a temporary MDNode.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@260113 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-08 17:03:28 +00:00
Adrian Prantl 4404328870 Add a missing call to MDNode::deleteTemporary().
Follow-up to r259975. Kudos to the ASAN bots!

<rdar://problem/24493203>

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@260002 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-06 18:39:34 +00:00
Adrian Prantl 6fbed68720 Fix a crash when emitting dbeug info for forward-declared scoped enums.
It is possible for enums to be created as part of their own
declcontext. We need to cache a placeholder to avoid the type being
created twice before hitting the cache.

<rdar://problem/24493203>

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@259975 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-06 01:59:09 +00:00
Benjamin Kramer 1dde17c5ad Move DebugInfoKind into its own header to cut the cyclic dependency edge from Driver to Frontend.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@259489 91177308-0d34-0410-b5e6-96231b3b80d8
2016-02-02 11:06:51 +00:00
Manman Ren 43af734908 Class Property: handle class properties.
At places where we handle instance properties, if necessary.

rdar://23891898


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@258979 91177308-0d34-0410-b5e6-96231b3b80d8
2016-01-27 20:00:32 +00:00
Manman Ren 00fef86c90 Use instance_properties instead of properties. NFC.
All current properties are instance properties.

This is the second patch in a series of patches to support class properties
in addition to instance properties in objective-c.

rdar://23891898


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@258824 91177308-0d34-0410-b5e6-96231b3b80d8
2016-01-26 18:05:23 +00:00
Adrian Prantl d97ae762ac Module debugging: Create a parent DIModule with the PCH name for types
emitted into a precompiled header to mirror the debug info emitted for
object files importing the PCH.

rdar://problem/24290667

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@258555 91177308-0d34-0410-b5e6-96231b3b80d8
2016-01-22 21:14:41 +00:00
Adrian Prantl c87ca354aa Fix the build by using the correct suffix for 64 bit literals
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@258531 91177308-0d34-0410-b5e6-96231b3b80d8
2016-01-22 19:29:41 +00:00
Adrian Prantl 9fd9596d49 Fix a typo in r258507 and change the PCH dwoid constant to ~1UL.
rdar://problem/24290667

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@258519 91177308-0d34-0410-b5e6-96231b3b80d8
2016-01-22 18:46:45 +00:00
Adrian Prantl a892974a4f Module Debugging: Use a nonzero DWO id for precompiled headers.
PCH files don't have a module signature and LLVM uses a nonzero DWO id as
an indicator for skeleton / module CUs. This change pins the DWO id for PCH
files to a known constant value.
The correct long-term solution here is to implement a module signature
that is an actual dterministic hash (at the moment module signatures are
just random nonzero numbers) and then enable this for PCH files as well.

<rdar://problem/24290667>

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@258507 91177308-0d34-0410-b5e6-96231b3b80d8
2016-01-22 17:43:43 +00:00
Adrian Prantl 3d5d4c3965 Module Debugging: Fine-tune the condition that determines whether a type
can be found in a module.

There are externally visible anonymous types that can be found:
  typedef struct { } s; // I can be found via the typedef.
There are anonymous internal types that can be found:
  namespace { struct s {}; } // I can be found by name.

rdar://problem/24199640

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@258272 91177308-0d34-0410-b5e6-96231b3b80d8
2016-01-20 01:29:34 +00:00
Adrian Prantl 4732653928 Module Debugging: Don't emit external type references to anonymous types.
Even if they exist in the module, they can't be matched with the forward
declaration in the object file.
<rdar://problem/24199640>

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@258251 91177308-0d34-0410-b5e6-96231b3b80d8
2016-01-19 23:42:53 +00:00
Rui Ueyama 9e83128d12 Update for LLVM function name change.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@257802 91177308-0d34-0410-b5e6-96231b3b80d8
2016-01-14 21:00:27 +00:00
Xiuli Pan 97f9428a0d [OpenCL] Pipe type support
Summary:
Support for OpenCL 2.0 pipe type.
This is a bug-fix version for bader's patch reviews.llvm.org/D14441


Reviewers: pekka.jaaskelainen, Anastasia

Subscribers: bader, Anastasia, cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@257254 91177308-0d34-0410-b5e6-96231b3b80d8
2016-01-09 12:53:17 +00:00
Chad Rosier 1f9949dbee Fix an unused variable warning from r256012.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@256023 91177308-0d34-0410-b5e6-96231b3b80d8
2015-12-18 20:08:40 +00:00
Adrian Prantl 7973a6be38 Add a defensive check for a nullptr.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@256012 91177308-0d34-0410-b5e6-96231b3b80d8
2015-12-18 19:44:31 +00:00
Reid Kleckner 52750c2714 Print qualified display names when emitting CodeView
This is what debuggers expect.  Words towards fixing PR21528.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@255744 91177308-0d34-0410-b5e6-96231b3b80d8
2015-12-16 02:04:40 +00:00
Ekaterina Romanova 34a3e1fd8e Do not generate DW_TAG_imported_module for anonymous namespaces (even nested) for all the platforms except PS4.
For PS4, generate explicit import for anonymous namespaces and mark it by DW_AT_artificial attribute.

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



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@255281 91177308-0d34-0410-b5e6-96231b3b80d8
2015-12-10 18:52:50 +00:00
Nico Weber 9543c82dd2 Small follow-up to 254750 to get the test added there passing...
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@254754 91177308-0d34-0410-b5e6-96231b3b80d8
2015-12-04 19:35:45 +00:00
Nico Weber d2a090fb5a Fix debug info for Objective-C properties from class extensions after r251874
After r251874, properties from class extensions no longer show up in
ObjCInterfaceDecl::properties().  Make debug info emission explicitly
look for properties in class extensions before looking at direct properties.

Also add a test that checks for this.  There are three interesting cases:

1. A property is only declared in a class extension, and the @implementation
   is in a different file.  This used to generated a DIObjcProperty before
   r251874 and does again with this fix.

2. A property is declared as readonly in the class itself and redeclared as
   readwrite in a class extension. clang before r251874 put the DIObjcProperty
   on the first declaration. clang after r251874 didn't emit any DIObjcProperty,
   and clang with this fix puts it on the readwrite redeclaration (which is
   what lookup finds).  This seems like a progression.

3. Like 2, but with an @implementation in the same file.  In this case,
   the property debug info gets generated a second time through the ivar
   from the definition.  In this case, lookup and declaration code need
   to agree on the line number so that the DIObjcProperty isn't emitted
   twice.  In this case, clang before r251874 emitted one DIObjcProperty
   on the first declaration, clang with r251874 emitted one on the second
   declaration, and clang with this patch still does the latter.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@254750 91177308-0d34-0410-b5e6-96231b3b80d8
2015-12-04 19:14:14 +00:00
Reid Kleckner da953be488 [DebugInfo] Look through type sugar on union types when casting
Fixes PR25584.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@253680 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-20 17:41:12 +00:00
Keno Fischer 344bb9bced [CGDebugInfo] Set the size and align for reference types
In r253186, I changed the DIBuilder API to now take size and align
for reference types as well. This was done in preparation for upcoming
changes to the Verifier that will validate that sizes match between
DI types and IR values that are declared as having those types.
This updates clang to actually pass the information through.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@253190 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-16 09:04:13 +00:00
Peter Collingbourne c6358e5569 CodeGen: Update for debug info API change.
Differential Revision: http://reviews.llvm.org/D14266

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@252220 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-05 22:04:14 +00:00
Douglas Gregor 249d7a566d Stop back-patching 'readonly' Objective-C properties with 'readwrite' ones.
A 'readonly' Objective-C property declared in the primary class can
effectively be shadowed by a 'readwrite' property declared within an
extension of that class, so long as the types and attributes of the
two property declarations are compatible.

Previously, this functionality was implemented by back-patching the
original 'readonly' property to make it 'readwrite', destroying source
information and causing some hideously redundant, incorrect
code. Simplify the implementation to express how this should actually
be modeled: as a separate property declaration in the extension that
shadows (via the name lookup rules) the declaration in the primary
class. While here, correct some broken Fix-Its, eliminate a pile of
redundant code, clean up the ARC migrator's handling of properties
declared in extensions, and fix debug info's naming of methods that
come from categories.

A wonderous side effect of doing this write is that it eliminates the
"AddedObjCPropertyInClassExtension" method from the AST mutation
listener, which in turn eliminates the last place where we rewrite
entire declarations in a chained PCH file or a module file. This
change (which fixes rdar://problem/18475765) will allow us to
eliminate the rewritten-decls logic from the serialization library,
and fixes a crash (rdar://problem/23247794) illustrated by the
test/PCH/chain-categories.m example.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@251874 91177308-0d34-0410-b5e6-96231b3b80d8
2015-11-03 01:15:46 +00:00
Benjamin Kramer aa1247dbae [CodeGen] Remove dead code. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@250418 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-15 15:29:40 +00:00
Eric Christopher f3dafc4617 Update clang for DIBuilder::createSubroutineType API change.
Patch by Amaury Sechet!

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@250373 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-15 06:56:08 +00:00
Saleem Abdulrasool cc4221bf16 Support Debug Info path remapping
Add support for the `-fdebug-prefix-map=` option as in GCC.  The syntax is
`-fdebug-prefix-map=OLD=NEW`.  When compiling files from a path beginning with
OLD, change the debug info to indicate the path as start with NEW.  This is
particularly helpful if you are preprocessing in one path and compiling in
another (e.g. for a build cluster with distcc).

Note that the linearity of the implementation is not as terrible as it may seem.
This is normally done once per file with an expectation that the map will be
small (1-2) entries, making this roughly linear in the number of input paths.

Addresses PR24619.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@250094 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-12 20:21:08 +00:00
Adrian Prantl 191d76ccf9 Module Debugging: Emit (ObjC) function declarations in the module scope
when building a module.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@249282 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-04 23:23:04 +00:00
Adrian Prantl b79caa0e7b Module debugging: Don't emit forward declarations in module scopes.
A forward declaration inside a module header does not belong to the module.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@249157 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-02 17:36:14 +00:00
Adrian Prantl b3c237670d Remove unused variable.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@249155 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-02 17:36:03 +00:00
Adrian Prantl 4ff9270301 Module debugging: Also emit Objective-C interfaces forward declarations
in their module scope when building a clang module.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@249031 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-01 16:57:02 +00:00
Adrian Prantl b23407aab1 Module debugging: Emit Objective-C interfaces in their module scope when
building a clang module.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@248974 91177308-0d34-0410-b5e6-96231b3b80d8
2015-10-01 00:48:51 +00:00
Adrian Prantl 81c359b957 CGDebugInfo: Don't reuse a reference into a DenseMap if the DenseMap may
be modified in between. (NFC)

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@248826 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-29 20:44:46 +00:00
Adrian Prantl 50edddde19 Module Debugging: Emit submodules as nested DW_TAG_modules.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@248511 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-24 16:10:10 +00:00
Adrian Prantl 3ea7b1c1a4 Debug Info: Use the module pointer as key for the module cache.
This way we don't need to rebuild the full module name for every decl.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@248510 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-24 16:10:04 +00:00
Adrian Prantl 5be843617b Refactor ASTSourceDescriptor to not store copies of all strings. (NFC)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@248509 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-24 16:10:00 +00:00
Adrian Prantl 73315f72a2 Module Debugging: Use the clang module signature as the module's dwo_id
when building a module. Clang already records the module signature when
building a skeleton CU to reference a clang module.

Matching the id in the skeleton with the one in the module allows a DWARF
consumer to verify that they found the correct version of the module
without them needing to know about the clang module format.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@248345 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-22 23:26:43 +00:00
Adrian Prantl 9345c88c02 Debug Info: When building a module, emit skeleton CUs for imported modules.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@248184 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-21 17:48:37 +00:00
Adrian Prantl a83de9f778 Module debugging: Support submodules in the PCM/PCH debug info.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@248127 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-20 16:51:35 +00:00
Adrian Prantl 9e767ddcc6 Further simplify CGDebugInfo::getOrCreateModuleRef().
DIBuilder ignoers DICompileUnits that are passed in as scopes anyway.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@248077 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-19 00:59:22 +00:00
Adrian Prantl 883c10b4e1 Rename ASTSourceDescriptor::ModuleName to FullModuleName for clarity.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@248070 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-19 00:10:37 +00:00
Adrian Prantl 3fb6a64655 Refactor ASTReader::getSourceDescriptor(const Module &) into a constructor
of ASTSourceDescriptor. It was effectively a static function.

NFC.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@248069 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-19 00:10:32 +00:00
Adrian Prantl c15da610ac CGDebugInfo: Make creating a skeleton CU in getOrCreateModuleRef optional.
We don't want a skeleton CU when generating debug info for the module
itself.

NFC.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@248062 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-18 23:01:45 +00:00
Adrian Prantl 4dd66d0704 Debug Info: Use the full module name as a key when caching DIModules.
The signature may not have been computed at the time the module reference
is generated (e.g.: in the future while emitting debug info for a clang
module). Using the full module name is safe because each clang module may
only have a single definition.

NFC.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@248037 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-18 21:06:14 +00:00
Alexey Bader a3e40c774f [OpenCL] Add new types for OpenCL 2.0.
Patch by Pedro Ferreira.
Reviewers: pekka.jaaskelainen
Differential Revision: http://reviews.llvm.org/D12855

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@247676 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-15 11:18:52 +00:00
Adrian Prantl 1955dea373 Remove an unnecessary check. NFC
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@247448 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-11 18:54:31 +00:00
Adrian Prantl 221aabd028 Remove a redundant check from CGDebugInfo::shouldOmitDefinition() (NFC).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@247447 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-11 18:54:28 +00:00
Adrian Prantl 7a7433b56a Cleanup: Get rid of a bunch of unnecessary invocations of internString()
in CGDebugInfo.cpp: MDString::get() copies its arguments.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@247445 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-11 18:45:02 +00:00
Adrian Prantl 2532f2149e Module Debugging: Emit forward declarations for types that are defined in
clang modules, if -dwarf-ext-refs (DebugTypesExtRefs) is specified.

This reimplements r247369 in about a third of the amount of code.
Thanks to David Blaikie pointing this out in post-commit review!

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@247432 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-11 17:23:08 +00:00
Adrian Prantl d5dd152695 Revert "Module Debugging: Emit forward declarations for types that are defined in"
This reverts commit r247369 to facilitate reviewing of the following patch.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@247431 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-11 17:23:03 +00:00
Adrian Prantl 53a314a227 Module Debugging: Emit forward declarations for types that are defined in
clang modules, if -dwarf-ext-refs (DebugTypesExtRefs) is specified.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@247369 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-11 01:03:26 +00:00
Adrian Prantl 3a2252c1af Cleanup: Let CGDebugInfo::ModuleRefCache use a TrackingMDNode (NFC).
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@247368 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-11 01:03:19 +00:00
David Majnemer 2affb95d6d [MS ABI] Make member pointers return true for isIncompleteType
The type of a member pointer is incomplete if it has no inheritance
model.  This lets us reuse more general logic already embedded in clang.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@247346 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-10 21:52:00 +00:00
Adrian Prantl 62c5ac0410 Add a getDeclContextDescriptor() helper function to CGDebugInfo. (NFC)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@247319 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-10 18:39:45 +00:00
Adrian Prantl 5dcf1edb28 Remove unneeded #include.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@247081 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-08 22:06:40 +00:00
Adrian Prantl d9178eb887 Module Debugging: Emit debug type information into clang ObjC modules.
When -fmodule-format is set to "obj", emit debug info for all types
declared in a module or referenced by a declaration into the module's
object file container.

This patch adds support for Objective-C types and methods.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@247068 91177308-0d34-0410-b5e6-96231b3b80d8
2015-09-08 20:41:52 +00:00
Adrian Prantl d2e47e291c CGDebugInfo: Instead of uniquing RetainedTypes, just refrain from retaining
them more than once. (NFC)

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@246231 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-27 22:56:46 +00:00
Adrian Prantl 0a32cc28cd CGDebugInfo: Factor out a getOrCreateStandaloneType() method.
Usually debug info is created on the fly while during codegen.
With this API it becomes possible to create standalone debug info
for types that are not referenced by any code, such as emitting debug info
for a clang module or for implementing something like -gfull.
Because on-the-fly debug info generation may still insert retained types
on top of them, all RetainedTypes are uniqued in CGDebugInfo::finalize().

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@246210 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-27 21:21:19 +00:00
Adrian Prantl 7bbf57e36a Add a -gmodules option to the driver and a -dwarf-ext-refs to cc1
to enable the use of external type references in the debug info
(a.k.a. module debugging).

The driver expands -gmodules to "-g -fmodule-format=obj -dwarf-ext-refs"
and passes that to cc1. All this does at the moment is set a flag
codegenopts.

http://reviews.llvm.org/D11958

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@246192 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-27 19:46:20 +00:00
Duncan P. N. Exon Smith eb6222eaad DI: Clarify meaning of createTempFunctionFwdDecl() arg, NFC
I stared at `false /*declaration*/` for quite some time before giving up
and checking the actual function to see what it meant.  Replacing with
`/* isDefinition = */ false` to save myself effort later.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@246095 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-26 22:21:09 +00:00
Yaron Keren f49d6b8491 Remove and forbid raw_svector_ostream::flush() calls.
After r244870 flush() will only compare two null pointers and return,
doing nothing but wasting run time. The call is not required any more
as the stream and its SmallString are always in sync.

Thanks to David Blaikie for reviewing.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@244928 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-13 18:12:56 +00:00
David Blaikie bc09bae0bc Wdeprecated: ApplyDebugLocation is returned by value yet if it is ever copied (rather than RVO'd) that would be broken, make it movable instead
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@244838 91177308-0d34-0410-b5e6-96231b3b80d8
2015-08-12 23:49:57 +00:00
Duncan P. N. Exon Smith aca5ead72a DI: Update for LLVM API change for local variables
Adjust to LLVM DIBuilder API changes in r243764, using
`createAutoVariable()` and `createParameterVariable()` in place of
`createLocalVariable()`.  No real functionality change here.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243765 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-31 17:56:14 +00:00
Duncan P. N. Exon Smith 8b3103c132 DI: Make getOrCreateLimitedType() return DICompositeType, NFC
Change `getOrCreateLimitedType()` to return a `DICompositeType` and
remove the casts from its callers.  Inside, I've strengthened a `cast`
from `DICompositeTypeBase`, but the casts in the callers already prove
that this is safe.  There should be no functionality change here.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243155 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-24 20:34:41 +00:00
Duncan P. N. Exon Smith 71b79a5c01 DI: Make StaticDataMemberCache type-safe, NFC
Change `StaticDataMemberCache` to store references to `DIDerivedType`
directly, and remove now-unnecessary casts from the accessors.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@243129 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-24 18:05:58 +00:00
Adrian Prantl 1e53f23050 Cleanup the doxygen comments in CGDebugInfo.cpp according to the coding
standards. Remove several hilariously out-of-date and redundant comments
and move the non-redundant ones into the header file.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@241733 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-08 21:18:34 +00:00
Adrian Prantl 27cac9536c Debug info: Emit distinct __block_literal_generic types for blocks with
different function signatures. (Previously clang would emit all block
pointer types with the type of the first block pointer in the compile
unit.)

rdar://problem/21602473

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@241534 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-07 00:49:35 +00:00
Adrian Prantl 5f8a176ddf Debug info: Don't emit a bogus location for the global block pointer type
(__block_literal_generic).

The arbitrary nature of the location confuses lldb and prevents type
uniquing.

rdar://problem/21602473

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@241511 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-06 21:31:35 +00:00
David Blaikie ef109b2e27 Revert "[DebugInfo] Fix debug info generation for function static variables, typedefs, and records"
Caused PR24008.

This reverts commit r241154.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@241177 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-01 18:07:22 +00:00
Michael Kuperstein 979403f2e3 [DebugInfo] Fix debug info generation for function static variables, typedefs, and records
Function static variables, typedefs and records (class, struct or union) declared inside
a lexical scope were associated with the function as their parent scope, rather than the
lexical scope they are defined or declared in.

This fixes PR19238

Patch by: amjad.aboud@intel.com
Differential Revision: http://reviews.llvm.org/D9760

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@241154 91177308-0d34-0410-b5e6-96231b3b80d8
2015-07-01 12:34:39 +00:00
Adrian Prantl d2eec01cea Use an early exit to improve readability. (NFC)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@241088 91177308-0d34-0410-b5e6-96231b3b80d8
2015-06-30 18:01:05 +00:00
Adrian Prantl e9ad7b24fe Debug Info: Emit debug info for @import declarations.
This allows a module-aware debugger such as LLDB to import the currently
visible modules before dropping into the expression evaluator.

rdar://problem/20965932

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@241084 91177308-0d34-0410-b5e6-96231b3b80d8
2015-06-30 17:39:51 +00:00
Paul Robinson a288f22e28 Omit 'nodebug' methods from the class description.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@240664 91177308-0d34-0410-b5e6-96231b3b80d8
2015-06-25 17:50:43 +00:00
David Majnemer 4f0605ea6d [CodeGen] Rename EmitMemberPointer to EmitMemberFunctionPointer
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@240382 91177308-0d34-0410-b5e6-96231b3b80d8
2015-06-23 07:31:01 +00:00
Adrian Prantl 8eb026ceb6 Debug Info: Turn on ODR type uniquing for (the C++ part of) Objective-C++.
rdar://problem/20571359

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@239781 91177308-0d34-0410-b5e6-96231b3b80d8
2015-06-15 23:18:16 +00:00
David Majnemer 8032c0ac05 [MS ABI, DebugInfo] Omit the size for model-less pointers-to-members
The representation of a pointer-to-member in the MS ABI is governed by
the layout of the relevant class or if a model has been explicitly
specified.  If no model is specified, then an appropriate
"worst-case-scenario" model is implicitly chosen if, and only, if the
pointer-to-member type's representation was needed.

Debug info cannot force a pointer-to-member type to have a
representation so do not try to query the size of such a type unless we
know it is safe to do so.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@238259 91177308-0d34-0410-b5e6-96231b3b80d8
2015-05-26 21:54:24 +00:00
Adrian Prantl f15cf6fad3 Debug info: Adapt to new DIBuilder interface.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@237948 91177308-0d34-0410-b5e6-96231b3b80d8
2015-05-21 20:37:26 +00:00
Adrian Prantl 3d58a85fdd Debug Info: Represent local anonymous unions as anonymous unions
and as artificial local variables in the debug info.

This is a follow-up to r236059. We can't get rid of the local variables
entirely because the gdb buildbot depends on them, but we can mark them
as artificial while still emitting the correct debug info. As I learned
from review comments other compilers also follow this model.

A paired commit in LLVM temporarily relaxes the debug info verifier to
not check the integrity of DW_OP_bit_pieces of artificial variables.

rdar://problem/20730771

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@236125 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-29 16:52:31 +00:00
Duncan P. N. Exon Smith 062dd42436 DebugInfo: Metadata constructs now start with DI*
LLVM r236120 renamed debug info IR constructs to use a `DI` prefix, now
that the `DIDescriptor` hierarchy has been gone for about a week.  This
commit was generated using the rename-md-di-nodes.sh upgrade script
attached to PR23080, followed by running clang-format-diff.py on the
`lib/` portion of the patch.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@236121 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-29 16:40:08 +00:00
Adrian Prantl b4843e4f6c Revert "Debug Info: Represent local anonymous unions as anonymous unions"
This reverts commit r236059 as it breaks the gdb buildbot.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@236110 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-29 15:05:50 +00:00
Adrian Prantl 79a35c23d3 Debug Info: Represent local anonymous unions as anonymous unions
in the debug info. This patch deletes a hack that emits the members
of local anonymous unions as local variables.

Besides being morally wrong, the existing representation using local
variables breaks internal assumptions about the local variables' storage
size.

Compiling

```
   void fn1() {
     union {
       int i;
       char c;
     };
     i = c;
   }

```

with -g -O3 -verify will cause the verifier to fail after SROA splits
the 32-bit storage for the "local variable" c into two pieces because the
second piece is clearly outside the 8-bit range that is expected for a
variable of type char. Given the choice I'd rather fix the debug
representation than weaken the verifier.

Debuggers generally already know how to deal with anonymous unions when
they are members of C++ record types, but they may have problems finding
the local anonymous struct members in the expression evaluator.

rdar://problem/20730771

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@236059 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-28 23:01:24 +00:00
David Majnemer 3fb626d1f8 Replace getPointeeType()->isFunctionType with isMemberDataPointerType
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@235682 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-24 01:25:08 +00:00
Duncan P. N. Exon Smith 431bf466ed DebugInfo: Prepare for removal of DIArray and DITypeArray typedefs
An upcoming LLVM commit will remove the `DIArray` and `DITypeArray`
typedefs that shadow `DebugNodeArray` and `MDTypeRefArray`,
respectively.  Use those types directly.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@235412 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-21 20:07:29 +00:00
Duncan P. N. Exon Smith 8fc937c2fb DebugInfo: Prepare for deletion of DIDescriptor subclasses
An upcoming LLVM commit will delete all the remaining subclasses of (the
already deleted) `DIDescriptor`.  Stop using them.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@235403 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-21 18:43:54 +00:00
Duncan P. N. Exon Smith 91e509234e DebugInfo: Prepare for deletion of subclasses of DIScope
Prepare for the deletion in LLVM of the subclasses of (the already
deleted) `DIScope` by using the raw pointers they were wrapping
directly.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@235355 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-20 22:09:57 +00:00
Duncan P. N. Exon Smith f5b4bb6556 DebugInfo: Prepare for deletion of subclasses of DIType
Subclasses of (the already deleted) `DIType` will be deleted by an
upcoming LLVM commit.  Remove references.

While `DICompositeType` wraps `MDCompositeTypeBase` and `DIDerivedType`
wraps `MDDerivedTypeBase`, most uses of each really meant the more
specific `MDCompositeType` and `MDDerivedType`.  I updated accordingly.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@235350 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-20 21:17:26 +00:00
Duncan P. N. Exon Smith 9e883ba884 DebugInfo: Prepare for deletion of DIType
`DIType` is going to be deleted by an upcoming LLVM commit, so replace
uses with `MDType*`.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@235330 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-20 18:51:48 +00:00
Duncan P. N. Exon Smith e106cb1034 DebugInfo: Prepare for deletion of DIScope
An upcoming LLVM commit will delete `DIScope`, so update users to
`MDScope*`.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@235326 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-20 18:32:15 +00:00
Duncan P. N. Exon Smith eff7a82be5 DebugInfo: Prepare for deletion of DIDescriptor
Prepare for upcoming LLVM change to delete `DIDescriptor`.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@235245 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-18 00:07:30 +00:00
Duncan P. N. Exon Smith 3878f8557a DebugInfo: Update for LLVM API change in DIBuilder (r235111)
LLVM r235111 changed the `DIBuilder` API to stop using `DIDescriptor`
and its subclasses.  Rolled into this was some tightening up of types:

  - Scopes: `DIDescriptor` => `MDScope*`.
  - Generic debug nodes: `DIDescriptor` => `DebugNode*`.
  - Subroutine types: `DICompositeType` => `MDSubroutineType*`.
  - Composite types: `DICompositeType` => `MDCompositeType*`.

Note that `DIDescriptor` wraps `MDNode`, and `DICompositeType` wraps
`MDCompositeTypeBase`.

It's this new type strictness that requires changes here.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@235112 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-16 16:36:45 +00:00
Duncan P. N. Exon Smith b4a4ab9bdd DebugInfo: Prepare for DIDescriptor to be gutted in LLVM
All the API is about to be dropped from `DIDescriptor` in LLVM, so stop
using it.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@235068 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-16 01:53:23 +00:00
Duncan P. N. Exon Smith 32cb4405ec DebugInfo: Prepare for DIScope to be gutted in LLVM
An upcoming LLVM commit will gut `DIScope`, so just use `MDScope*`
directly.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@235066 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-16 01:36:36 +00:00
Duncan P. N. Exon Smith dbdd3a1a5d DebugInfo: Prepare for DIType to be gutted
`DIType` and its subclasses are about to be gutted in LLVM.  Prepare for
that by treating these like the raw pointers they wrap.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@235063 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-16 01:00:56 +00:00
Duncan P. N. Exon Smith c64fc4415b DebugInfo: Prepare for LLVM change removing DIType::isValid()
This is being replaced with a null check.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@235058 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-15 23:48:50 +00:00
Duncan P. N. Exon Smith dfa1d05b32 DebugInfo: Prepare for LLVM gutting DICompileUnit/DIFile
An upcoming LLVM commit will gut `DICompileUnit` and `DIFile`, so start
treating them more like pointers.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@235054 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-15 23:19:15 +00:00
Duncan P. N. Exon Smith cd72ec433f DebugInfo: Pass DebugLocs when creating intrinsics
Update for LLVM API change r235041 that makes `DIBuilder` require a
`DebugLoc` to create a debug info intrinsic.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@235042 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-15 21:18:30 +00:00
Duncan P. N. Exon Smith 7f288cef47 DebugInfo: Prepare for DISubprogram/DILexicalBlock* to be gutted
An upcoming LLVM commit will remove this API, so stop using it.  Just
access the raw pointers using `operator->()`.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@234848 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-14 03:24:14 +00:00
Duncan P. N. Exon Smith dc54701c1f DebugInfo: Switch from replaceAllUsesWith() to replaceTemporary()
Stop using `DIDescriptor`'s wrapper around
`MDNode::replaceAllUsesWith()` (which is going away).  The new home for
this logic is `DIBuilder::replaceTemporary()`, added in LLVM r234695.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@234696 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-11 19:05:04 +00:00
Duncan P. N. Exon Smith 998dc53a38 Revert "Fix a compiler error under MSVC"
This reverts the bandaid commit in r234308 now that I have a proper fix
in LLVM as of r234326.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@234339 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-07 18:41:26 +00:00
Duncan P. N. Exon Smith f7173ed4a7 DebugInfo: LLVM API change in r234326 for array-like tuple wrappers
Update a few calls to `DIBuilder` now that `MDTuple` array-wrappers
don't have implicit conversions to `MDTuple*`.  I may circle back and
update `DIBuilder` to take arrays here, to make it easier for the
callers.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@234327 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-07 16:50:49 +00:00
Timur Iskhodzhanov a388c2a9b1 Fix a compiler error under MSVC
Error message was:
CGDebugInfo.cpp(1047) : error C2666: 'llvm::MDTypeRefArray::operator []' : 2 overloads have similar conversions
  DebugInfoMetadata.h(106): could be 'llvm::MDTypeRef llvm::MDTypeRefArray::operator [](unsigned int) const'
  while trying to match the argument list '(llvm::DITypeArray, int)'

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@234308 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-07 11:26:00 +00:00
Duncan P. N. Exon Smith b0d698fc61 DebugInfo: Update for LLVM change in r234290
The API for `DIArray` changed; use the new one.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@234291 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-07 04:14:45 +00:00
Duncan P. N. Exon Smith b32dd42dbb CGDebugInfo: Stop using DIDescriptor::is*() and auto-casting
The clang edition of r234255: use built-in `isa<>`, `dyn_cast<>`, etc.,
and only build `DIDescriptor`s from pointers that are correctly typed.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@234256 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-06 23:21:33 +00:00
Duncan P. N. Exon Smith adca9604f1 DebugInfo: Use DILexicalBlockFile::getContext() over getScope()
`getScope()` passes the scope back through a `DILexicalBlock` even
though the underlying pointer may be an incompatible `MDSubprogram`.
Just use `getContext()` directly.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@234245 91177308-0d34-0410-b5e6-96231b3b80d8
2015-04-06 22:04:18 +00:00
Duncan P. N. Exon Smith 70584084e5 DebugInfo: Use new LLVM API for DebugLoc
Use the new API for `DebugLoc` added in r233573 before the old one
disappears.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@233589 91177308-0d34-0410-b5e6-96231b3b80d8
2015-03-30 20:01:41 +00:00
Duncan P. N. Exon Smith 178a7e9255 DebugInfo: Don't call DIBuilder::retainType(nullptr)
An upcoming LLVM commit will make calling
`DIBuilder::retainType(nullptr)` illegal (actually, it already was, but
it wasn't verified).  Check for null before calling.

This triggered in test/CodeGenObjC/debug-info-block-helper.m.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@233443 91177308-0d34-0410-b5e6-96231b3b80d8
2015-03-27 22:58:05 +00:00
Duncan P. N. Exon Smith ad019c87dc DebugInfo: Check for null before using DIType
A WIP patch to turn on stricter `DIDescriptor` accessor checks fires
here; it's obvious from the code that `T` can be null, so add an
explicit check.  Caught by dozens of current testcases.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@232791 91177308-0d34-0410-b5e6-96231b3b80d8
2015-03-20 00:53:40 +00:00
Peter Collingbourne 94f58f70ab DebugInfo: Give externally defined types a size and alignment where
possible. Fixes PR22736.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@230914 91177308-0d34-0410-b5e6-96231b3b80d8
2015-03-01 22:07:04 +00:00
Saleem Abdulrasool f5c02983d5 DebugInfo: hoist definition into global context when needed
When generating debug info for a static inline member which is initialized for
the DLLExport storage class, hoist the definition into a non-composite type
context. Otherwise, we would trigger an assertion when generating the DIE for
the associated global value as the debug context has a type association. This
addresses PR22669.

Thanks to David Blakie for help in coming up with a solution to this!

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@230816 91177308-0d34-0410-b5e6-96231b3b80d8
2015-02-28 00:13:13 +00:00
Duncan P. N. Exon Smith 2ad85551a8 CGDebugInfo: Use DIImportedEntity default constructor, NFC
Use the newly minted `DIImportedEntity` default constructor (r230609)
rather than explicitly specifying `nullptr`.  The latter will become
ambiguous when the new debug info hierarchy is committed, since we'll
have both of the following:

    explicit DIImportedEntity(const MDNode *);
    DIImportedEntity(const MDImportedEntity *);

(Currently we just have the former.)

A default constructor is just as clear.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@230610 91177308-0d34-0410-b5e6-96231b3b80d8
2015-02-26 04:44:27 +00:00
Adrian Prantl d1c6a94011 Fix PR19351. While building up a composite type it is important to use
a non-uniqueable temporary node that is only turned into a permanent
unique or distinct node after it is finished.
Otherwise an intermediate node may get accidentally uniqued with another
node as illustrated by the testcase.

Paired commit with LLVM.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@228855 91177308-0d34-0410-b5e6-96231b3b80d8
2015-02-11 17:45:15 +00:00
Benjamin Kramer 887264b156 CodeGen: Move DebugLocs.
It's slightly cheaper than copying it, if the DebugLoc points to replaceable
metadata every copy is recorded in a DenseMap, moving reduces the peak size of
that map.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@228492 91177308-0d34-0410-b5e6-96231b3b80d8
2015-02-07 13:15:54 +00:00
David Blaikie c2d8f6b982 DebugInfo: Attribute cleanup code to the end of the scope, not the end of the function.
Now if you break on a dtor and go 'up' in your debugger (or you get an
asan failure in a dtor) during an exception unwind, you'll have more
context. Instead of all dtors appearing to be called from the '}' of the
function, they'll be attributed to the end of the scope of the variable,
the same as the non-exceptional dtor call.

This doesn't /quite/ remove all uses of CurEHLocation (which might be
nice to remove, for a few reasons) - it's still used to choose the
location for some other work in the landing pad. It'd be nice to
attribute that code to the same location as the exception calls within
the block and to remove CurEHLocation.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@228181 91177308-0d34-0410-b5e6-96231b3b80d8
2015-02-04 19:47:54 +00:00
Duncan P. N. Exon Smith a37c2f2b46 CodeGen: Update for LLVM API change in r228030
The mock tags are no longer in `dwarf::LLVMConstants`; they're in
`dwarf::Tag`.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@228032 91177308-0d34-0410-b5e6-96231b3b80d8
2015-02-03 21:25:34 +00:00
Adrian Prantl c9903b4453 Address review feedback for r228003.
- use named constructors
- get rid of MarkAsPrologue

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@228021 91177308-0d34-0410-b5e6-96231b3b80d8
2015-02-03 20:00:54 +00:00
Adrian Prantl 3ed5b8f439 Merge ArtificialLocation into ApplyDebugLocation and make a clear
distinction between the different use-cases. With the previous default
behavior we would occasionally emit empty debug locations in situations
where they actually were strictly required (= on invoke insns).
We now have a choice between defaulting to an empty location or an
artificial location.

Specifically, this fixes a bug caused by a missing debug location when
emitting C++ EH cleanup blocks from within an artificial function, such as
an ObjC destroy helper function.

rdar://problem/19670595

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@228003 91177308-0d34-0410-b5e6-96231b3b80d8
2015-02-03 18:40:42 +00:00
David Blaikie 6d20e9041a DebugInfo: Use the preferred location rather than the start location for expression line info
This causes things like assignment to refer to the '=' rather than the
LHS when attributing the store instruction, for example.

There were essentially 3 options for this:

* The beginning of an expression (this was the behavior prior to this
  commit). This meant that stepping through subexpressions would bounce
  around from subexpressions back to the start of the outer expression,
  etc. (eg: x + y + z would go x, y, x, z, x (the repeated 'x's would be
  where the actual addition occurred)).

* The end of an expression. This seems to be what GCC does /mostly/, and
  certainly this for function calls. This has the advantage that
  progress is always 'forwards' (never jumping backwards - except for
  independent subexpressions if they're evaluated in interesting orders,
  etc). "x + y + z" would go "x y z" with the additions occurring at y
  and z after the respective loads.
  The problem with this is that the user would still have to think
  fairly hard about precedence to realize which subexpression is being
  evaluated or which operator overload is being called in, say, an asan
  backtrace.

* The preferred location or 'exprloc'. In this case you get sort of what
  you'd expect, though it's a bit confusing in its own way due to going
  'backwards'. In this case the locations would be: "x y + z +" in
  lovely postfix arithmetic order. But this does mean that if the op+
  were an operator overload, say, and in a backtrace, the backtrace will
  point to the exact '+' that's being called, not to the end of one of
  its operands.

(actually the operator overload case doesn't work yet for other reasons,
but that's being fixed - but this at least gets scalar/complex
assignments and other plain operators right)

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@227027 91177308-0d34-0410-b5e6-96231b3b80d8
2015-01-25 01:19:10 +00:00
David Blaikie bcf4a38dff DebugInfo: Remove forced column-info workaround for inlined calls
This workaround was to provide unique call sites to ensure LLVM's inline
debug info handling would properly unique two calls to the same function
on the same line. Instead, this has now been fixed in LLVM (r226736) and
the workaround here can be removed.

Originally committed in r176895, but this isn't a straight revert due to
all the changes since then. I just searched for anything ForcedColumn*
related and removed them.

We could test this - but it didn't strike me as terribly valuable once
we're no longer adding this workaround everything just works as expected
& it's no longer a special case to test for.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@226738 91177308-0d34-0410-b5e6-96231b3b80d8
2015-01-21 23:08:17 +00:00
Adrian Prantl a99f49a59e Migrate all uses of DIVariable's FlagIndirectVariable to use a DIExpression
with a DW_OP_deref instead.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@226474 91177308-0d34-0410-b5e6-96231b3b80d8
2015-01-19 17:51:58 +00:00
David Blaikie d9bc87ef63 Reapply r225000 (reverted in r225555): DebugInfo: Generalize debug info location handling (and follow-up commits).
Several pieces of code were relying on implicit debug location setting
which usually lead to incorrect line information anyway. So I've fixed
those (in r225955 and r225845) separately which should pave the way for
this commit to be cleanly reapplied.

The reason these implicit dependencies resulted in crashes with this
patch is that the debug location would no longer implicitly leak from
one place to another, but be set back to invalid. Once a call with
no/invalid location was emitted, if that call was ever inlined it could
produce invalid debugloc chains and assert during LLVM's codegen.

There may be further cases of such bugs in this patch - they're hard to
flush out with regression testing, so I'll keep an eye out for reports
and investigate/fix them ASAP if they come up.

Original commit message:

Reapply "DebugInfo: Generalize debug info location handling"

Originally committed in r224385 and reverted in r224441 due to concerns
this change might've introduced a crash. Turns out this change fixes the
crash introduced by one of my earlier more specific location handling
changes (those specific fixes are reverted by this patch, in favor of
the more general solution).

Recommitted in r224941 and reverted in r224970 after it caused a crash
when building compiler-rt. Looks to be due to this change zeroing out
the debug location when emitting default arguments (which were meant to
inherit their outer expression's location) thus creating call
instructions without locations - these create problems for inlining and
must not be created. That is fixed and tested in this version of the
change.

Original commit message:

This is a more scalable (fixed in mostly one place, rather than many
places that will need constant improvement/maintenance) solution to
several commits I've made recently to increase source fidelity for
subexpressions.

This resetting had to be done at the DebugLoc level (not the
SourceLocation level) to preserve scoping information (if the resetting
was done with CGDebugInfo::EmitLocation, it would've caused the tail end
of an expression's codegen to end up in a potentially different scope
than the start, even though it was at the same source location). The
drawback to this is that it might leave CGDebugInfo out of sync. Ideally
CGDebugInfo shouldn't have a duplicate sense of the current
SourceLocation, but for now it seems it does... - I don't think I'm
going to tackle removing that just now.

I expect this'll probably cause some more buildbot fallout & I'll
investigate that as it comes up.

Also these sort of improvements might be starting to show a weakness/bug
in LLVM's line table handling: we don't correctly emit is_stmt for
statements, we just put it on every line table entry. This means one
statement split over multiple lines appears as multiple 'statements' and
two statements on one line (without column info) are treated as one
statement.

I don't think we have any IR representation of statements that would
help us distinguish these cases and identify the beginning of each
statement - so that might be something we need to add (possibly to the
lexical scope chain - a scope for each statement). This does cause some
problems for GDB and possibly other DWARF consumers.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@225956 91177308-0d34-0410-b5e6-96231b3b80d8
2015-01-14 07:38:27 +00:00
David Blaikie a740b903f8 Revert "DebugInfo: Generalize debug info location handling" and related commits
This reverts commit r225000, r225021, r225083, r225086, r225090.

The root change (r225000) still has several issues where it's caused
calls to be emitted without debug locations. This causes assertion
failures if/when those calls are inlined.

I'll work up some test cases and fixes before recommitting this.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@225555 91177308-0d34-0410-b5e6-96231b3b80d8
2015-01-09 23:00:28 +00:00
Adrian Prantl ad72e6e644 Debug info: pass in the correct size for a pointer to a member function.
This corrects a bug I introduced in r224781.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@225359 91177308-0d34-0410-b5e6-96231b3b80d8
2015-01-07 17:49:30 +00:00
David Blaikie b5615364f0 DebugInfo: Provide a less subtle way to set the debug location of simple ret instructions
un-XFAILing the test XFAIL'd in r225086 after it regressed in r225083.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@225090 91177308-0d34-0410-b5e6-96231b3b80d8
2015-01-02 22:07:26 +00:00
David Blaikie 92866af2f0 DebugInfo: Fix cases where location failed to be updated after r225000
The optimization (that appears to have been here since the earliest
implementation (r50848) & has become more complicated over the years) to
avoid recreating the debugloc if it would be the same was out of date
because ApplyDebugLocation was not re-updating the CurLoc/PrevLoc. This
optimization doesn't look terribly beneficial/necessary, so I'm removing
it - if it turns up in benchmarks, I'm happy to reconsider/reimplement
this with justification, but for now it just seems to add
complexity/problems.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@225083 91177308-0d34-0410-b5e6-96231b3b80d8
2015-01-02 19:06:25 +00:00
David Blaikie 1c4187aa7b Reapply "DebugInfo: Generalize debug info location handling"
Originally committed in r224385 and reverted in r224441 due to concerns
this change might've introduced a crash. Turns out this change fixes the
crash introduced by one of my earlier more specific location handling
changes (those specific fixes are reverted by this patch, in favor of
the more general solution).

Recommitted in r224941 and reverted in r224970 after it caused a crash
when building compiler-rt. Looks to be due to this change zeroing out
the debug location when emitting default arguments (which were meant to
inherit their outer expression's location) thus creating call
instructions without locations - these create problems for inlining and
must not be created. That is fixed and tested in this version of the
change.

Original commit message:

This is a more scalable (fixed in mostly one place, rather than many
places that will need constant improvement/maintenance) solution to
several commits I've made recently to increase source fidelity for
subexpressions.

This resetting had to be done at the DebugLoc level (not the
SourceLocation level) to preserve scoping information (if the resetting
was done with CGDebugInfo::EmitLocation, it would've caused the tail end
of an expression's codegen to end up in a potentially different scope
than the start, even though it was at the same source location). The
drawback to this is that it might leave CGDebugInfo out of sync. Ideally
CGDebugInfo shouldn't have a duplicate sense of the current
SourceLocation, but for now it seems it does... - I don't think I'm
going to tackle removing that just now.

I expect this'll probably cause some more buildbot fallout & I'll
investigate that as it comes up.

Also these sort of improvements might be starting to show a weakness/bug
in LLVM's line table handling: we don't correctly emit is_stmt for
statements, we just put it on every line table entry. This means one
statement split over multiple lines appears as multiple 'statements' and
two statements on one line (without column info) are treated as one
statement.

I don't think we have any IR representation of statements that would
help us distinguish these cases and identify the beginning of each
statement - so that might be something we need to add (possibly to the
lexical scope chain - a scope for each statement). This does cause some
problems for GDB and possibly other DWARF consumers.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@225000 91177308-0d34-0410-b5e6-96231b3b80d8
2014-12-30 19:39:33 +00:00
David Blaikie 6d32949a03 Revert "DebugInfo: Generalize debug info location handling"
Asserting when building compiler-rt when using a GCC host compiler.
Reverting while I investigate.

This reverts commit r224941.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@224970 91177308-0d34-0410-b5e6-96231b3b80d8
2014-12-29 23:49:00 +00:00
David Blaikie 431d80c13a Add an assertion to verify a container is non-empty before calling 'back()'
This would've helped stabilize/deflake some failures that were seen
after some recent changes.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@224943 91177308-0d34-0410-b5e6-96231b3b80d8
2014-12-29 18:37:03 +00:00
David Blaikie 00aa9ba831 Reapply "DebugInfo: Generalize debug info location handling"
Originally committed in r224385 and reverted in r224441 due to concerns
this change might've introduced a crash. Turns out this change fixes the
crash introduced by one of my earlier more specific location handling
changes (those specific fixes are reverted by this patch, in favor of
the more general solution).

Original commit message:

This is a more scalable (fixed in mostly one place, rather than many
places that will need constant improvement/maintenance) solution to
several commits I've made recently to increase source fidelity for
subexpressions.

This resetting had to be done at the DebugLoc level (not the
SourceLocation level) to preserve scoping information (if the resetting
was done with CGDebugInfo::EmitLocation, it would've caused the tail end
of an expression's codegen to end up in a potentially different scope
than the start, even though it was at the same source location). The
drawback to this is that it might leave CGDebugInfo out of sync. Ideally
CGDebugInfo shouldn't have a duplicate sense of the current
SourceLocation, but for now it seems it does... - I don't think I'm
going to tackle removing that just now.

I expect this'll probably cause some more buildbot fallout & I'll
investigate that as it comes up.

Also these sort of improvements might be starting to show a weakness/bug
in LLVM's line table handling: we don't correctly emit is_stmt for
statements, we just put it on every line table entry. This means one
statement split over multiple lines appears as multiple 'statements' and
two statements on one line (without column info) are treated as one
statement.

I don't think we have any IR representation of statements that would
help us distinguish these cases and identify the beginning of each
statement - so that might be something we need to add (possibly to the
lexical scope chain - a scope for each statement). This does cause some
problems for GDB and possibly other DWARF consumers.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@224941 91177308-0d34-0410-b5e6-96231b3b80d8
2014-12-29 18:18:45 +00:00
Adrian Prantl bafa8fc383 Debug Info: Pass the pointer size into createMemberPointerType().
Paired commit with LLVM.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@224781 91177308-0d34-0410-b5e6-96231b3b80d8
2014-12-23 19:11:54 +00:00
Adrian Prantl a4187a13a3 Fix a typo.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@224557 91177308-0d34-0410-b5e6-96231b3b80d8
2014-12-19 01:02:11 +00:00
Duncan P. N. Exon Smith 8422f69126 CGDebugInfo: Use DIBuilder API for self-referencing DICompositeTypes
Use new `DIBuilder` API from LLVM r224482 to mutate `DICompositeType`s,
rather than changing them directly.  This allows `DIBuilder` to track
otherwise orphaned cycles when `CollectContainingType()` creates a
self-reference.

Fixes PR21941.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@224483 91177308-0d34-0410-b5e6-96231b3b80d8
2014-12-18 00:48:56 +00:00
David Blaikie e03812c6e7 Revert "DebugInfo: Generalize debug info location handling"
Fails an ASan bootstrap - I'll try to reproduce locally & sort that out
before recommitting.

This reverts commit r224385.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@224441 91177308-0d34-0410-b5e6-96231b3b80d8
2014-12-17 18:02:04 +00:00
David Blaikie b2c6c4fef7 DebugInfo: Generalize debug info location handling
This is a more scalable (fixed in mostly one place, rather than many
places that will need constant improvement/maintenance) solution to
several commits I've made recently to increase source fidelity for
subexpressions.

This resetting had to be done at the DebugLoc level (not the
SourceLocation level) to preserve scoping information (if the resetting
was done with CGDebugInfo::EmitLocation, it would've caused the tail end
of an expression's codegen to end up in a potentially different scope
than the start, even though it was at the same source location). The
drawback to this is that it might leave CGDebugInfo out of sync. Ideally
CGDebugInfo shouldn't have a duplicate sense of the current
SourceLocation, but for now it seems it does... - I don't think I'm
going to tackle removing that just now.

I expect this'll probably cause some more buildbot fallout & I'll
investigate that as it comes up.

Also these sort of improvements might be starting to show a weakness/bug
in LLVM's line table handling: we don't correctly emit is_stmt for
statements, we just put it on every line table entry. This means one
statement split over multiple lines appears as multiple 'statements' and
two statements on one line (without column info) are treated as one
statement.

I don't think we have any IR representation of statements that would
help us distinguish these cases and identify the beginning of each
statement - so that might be something we need to add (possibly to the
lexical scope chain - a scope for each statement). This does cause some
problems for GDB and possibly other DWARF consumers.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@224385 91177308-0d34-0410-b5e6-96231b3b80d8
2014-12-16 22:49:17 +00:00
Duncan P. N. Exon Smith b37f14faed Fix a GCC error from r223803
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@223814 91177308-0d34-0410-b5e6-96231b3b80d8
2014-12-09 19:22:40 +00:00
Duncan P. N. Exon Smith c7376725b9 IR: Update clang for Metadata/Value split in r223802
Match LLVM API changes from r223802.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@223803 91177308-0d34-0410-b5e6-96231b3b80d8
2014-12-09 18:39:32 +00:00
Adrian Prantl 2bce653084 Debug info for blocks: Fix a bug caught by the Verifier.
When emitting nested block definitions, the insert-at-point variant of
DIBuilder::insertDeclare() could be called with the insertion point set
to the end-of-BasicBlock sentinel, causing the parent pointer of the
CallInst to be set to the intentionally bogus value of the sentinel.

Fixed by conditionally invoking the correct version of insertDeclare().
rdar://problem/19034882

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@222487 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-21 00:35:25 +00:00
David Blaikie 4a2879e214 DebugInfo: Fix another case of r222377 when we do have a definition of the variable, but we might not be emitting it (such as templates)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@222485 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-21 00:20:58 +00:00
Frederic Riss 6e377b4999 Remove now dead code.
After LLVM r222434, the Variables field of DISubprograms for forward
declarations will always be null. No need to keep code around to
delete them.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@222437 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-20 16:24:29 +00:00
Frederic Riss 8b4ad0b3e6 Prepare for the DIBuilder populating DISubprogram's Variables with null.
This is a followup to r222373. A better solution to the problem solved
there is to not create the leaked nodes at all (we know that they will
never be used for forward declared functions anyway). To avoid bot
breakage in the interval between the cfe and llvm commits, add a check
that the nMDNode is not null before deleting it. This code can completely
go away after the LLVM part is in.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@222433 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-20 15:46:59 +00:00
David Blaikie e6b5195e15 DebugInfo: Don't emit a 'global variable' when a static member declaration is referenced without a definition, just ensure the enclosing class (with the static member declaration) is emitted.
Addresses PR21511 by emitting appropriate metadata rather than
faux-global definitions for a variable that doesn't have a definition.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@222377 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-19 19:42:40 +00:00
Frederic Riss 76817eaa41 Fix a temporary MDNode leak.
While emitting debug information for function forward decalrations, we
create DISubprogram objects that aran't stored in the AllSubprograms
list, and thus won't get finalized by the DIBuilder. During the DIBuilder
finalize(), the temporary MDNode allocated for the DISubprogram
Variables field gets RAUWd with a non temporary DIArray. For the forward
declarations, simply delete that temporary node before we delete the
parent node, so that it doesn't leak.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@222373 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-19 18:53:46 +00:00
Frederic Riss c80925de22 Fully handle globals and functions in CGDebugInfo::getDeclarationOrDefinition()
Currently this function would return nothing for functions or globals that
haven't seen a definition yet. Make it return a forward declaration that will
get RAUWed with the definition if one is seen at a later point. The strategy
used to implement this is similar to what's done for types: the forward
declarations are stored in a vector and post processed upon finilization to
perform the required RAUWs.

For now the only user of getDeclarationOrDefinition() is EmitUsingDecl(), thus
this patch allows to emit correct imported declarations even in the absence of
an actual definition of the imported entity.

(Another user will be the debug info generation for argument default values
that I need to resurect).

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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@222220 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-18 03:40:51 +00:00
Frederic Riss a00a4bcede [DebugInfo] Move collection of various function/var decl properties into helper functions.
NFC. Helpers to be re-used in upcoming commit.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@222219 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-18 03:40:46 +00:00
Duncan P. N. Exon Smith 565d281dc1 CGDebugInfo: Update for DIBuilder API change
Tracking LLVM commit r222070.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@222071 91177308-0d34-0410-b5e6-96231b3b80d8
2014-11-15 00:24:50 +00:00