Commit Graph

1157 Commits

Author SHA1 Message Date
Amjad Aboud 05157f019a [DebugInfo] Added support to Clang FE for generating debug info for preprocessor macros.
Added "-fdebug-macro" flag (and "-fno-debug-macro" flag) to enable (and to disable) emitting macro debug info.
Added CC1 "-debug-info-macro" flag that enables emitting macro debug info.

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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@294637 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-09 22:07:24 +00:00
Dehao Chen 1090ea6d34 Change debug-info-for-profiling from a TargetOption to a function attribute.
Summary: cfe change for https://reviews.llvm.org/D29203

Reviewers: echristo, dblaikie

Reviewed By: dblaikie

Subscribers: mehdi_amini, cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@293834 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-01 22:45:21 +00:00
David Blaikie 2834af3e62 Reapply "DebugInfo: Omit class definitions even in the presence of available_externally vtables"
Accounts for a case that caused an assertion failure by attempting to
query for the vtable linkage of a non-dynamic type.t

This reverts commit r292801.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@293462 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-30 06:36:08 +00:00
Richard Smith fe32c6a334 PR0091R3: Implement parsing support for using templates as types.
This change adds a new type node, DeducedTemplateSpecializationType, to
represent a type template name that has been used as a type. This is modeled
around AutoType, and shares a common base class for representing a deduced
placeholder type.

We allow deduced class template types in a few more places than the standard
does: in conditions and for-range-declarators, and in new-type-ids. This is
consistent with GCC and with discussion on the core reflector. This patch
does not yet support deduced class template types being named in typename
specifiers.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@293207 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-26 20:40:47 +00:00
David Blaikie e24f740ec8 Revert "DebugInfo: Omit class definitions even in the presence of available_externally vtables"
Patch crashing on a bootstrapping sanitizer bot:
http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-bootstrap/builds/679

Reverting while I investigate.

This reverts commit r292768.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@292801 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-23 16:57:14 +00:00
David Blaikie 64edc01755 DebugInfo: Omit class definitions even in the presence of available_externally vtables
To ensure optimization level doesn't pessimize the -fstandalone-debug
vtable debug info optimization (where class definitions are only emitted
where the vtable is emitted - reducing redundant debug info) ensure the
debug info class definition is still omitted when an
available_externally vtable definition is emitted for optimization
purposes.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@292768 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-23 02:24:03 +00:00
Dehao Chen d90c50eaea Add -fdebug-info-for-profiling to emit more debug info for sample pgo profile collection
Summary:
SamplePGO uses profile with debug info to collect profile. Unlike the traditional debugging purpose, sample pgo needs more accurate debug info to represent the profile. We add -femit-accurate-debug-info for this purpose. It can be combined with all debugging modes (-g, -gmlt, etc). It makes sure that the following pieces of info is always emitted:

* start line of all subprograms
* linkage name of all subprograms
* standalone subprograms (functions that has neither inlined nor been inlined)

The impact on speccpu2006 binary size (size increase comparing with -g0 binary, also includes data for -g binary, which does not change with this patch):

               -gmlt(orig) -gmlt(patched) -g
433.milc       4.68%       5.40%          19.73%
444.namd       8.45%       8.93%          45.99%
447.dealII     97.43%      115.21%        374.89%
450.soplex     27.75%      31.88%         126.04%
453.povray     21.81%      26.16%         92.03%
470.lbm        0.60%       0.67%          1.96%
482.sphinx3    5.77%       6.47%          26.17%
400.perlbench  17.81%      19.43%         73.08%
401.bzip2      3.73%       3.92%          12.18%
403.gcc        31.75%      34.48%         122.75%
429.mcf        0.78%       0.88%          3.89%
445.gobmk      6.08%       7.92%          42.27%
456.hmmer      10.36%      11.25%         35.23%
458.sjeng      5.08%       5.42%          14.36%
462.libquantum 1.71%       1.96%          6.36%
464.h264ref    15.61%      16.56%         43.92%
471.omnetpp    11.93%      15.84%         60.09%
473.astar      3.11%       3.69%          14.18%
483.xalancbmk  56.29%      81.63%         353.22%
geomean        15.60%      18.30%         57.81%

Debug info size change for -gmlt binary with this patch:

433.milc       13.46%
444.namd       5.35%
447.dealII     18.21%
450.soplex     14.68%
453.povray     19.65%
470.lbm        6.03%
482.sphinx3    11.21%
400.perlbench  8.91%
401.bzip2      4.41%
403.gcc        8.56%
429.mcf        8.24%
445.gobmk      29.47%
456.hmmer      8.19%
458.sjeng      6.05%
462.libquantum 11.23%
464.h264ref    5.93%
471.omnetpp    31.89%
473.astar      16.20%
483.xalancbmk  44.62%
geomean        16.83%

Reviewers: davidxl, andreadb, rob.lougher, dblaikie, echristo

Reviewed By: dblaikie, echristo

Subscribers: hfinkel, rob.lougher, andreadb, gbedwell, cfe-commits, probinson, llvm-commits, mehdi_amini

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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@292458 91177308-0d34-0410-b5e6-96231b3b80d8
2017-01-19 00:44:21 +00:00
David Blaikie 7d56d0a8e5 DebugInfo: Don't include size/alignment on class declarations
This seems like it must've been a leftover by accident - no tests were
backing it up & it doesn't make much sense to include size/alignment on
class declarations (it'd only be on those declarations for which the
definition was available - otherwise the size/alignment would not be
known).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@290631 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-27 22:05:35 +00:00
Amjad Aboud 0bc0e2596f [DebugInfo] Added support for Checksum debug info feature.
Differential Revision: https://reviews.llvm.org/D27641

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@290515 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-25 10:12:27 +00:00
Adrian Prantl ce25d00e2e Update for LLVM global variable debug info API change.
This reapplies r289921.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@290155 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-20 02:10:02 +00:00
Peter Collingbourne 0dd752d8bd IRGen: Fix assertion failure when creating debug info for an integer constant wider than 64 bits.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@289996 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-16 22:10:52 +00:00
Adrian Prantl 5fa64845ee Revert "Update for LLVM global variable debug info API change."
This reverts commit r289921.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@289984 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-16 19:39:18 +00:00
Adrian Prantl bb01ff0b77 Update for LLVM global variable debug info API change.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@289921 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-16 04:26:15 +00:00
Adrian Prantl 1b3f221e0f Revert "Update for LLVM global variable debug info API change."
This reverts commit 289901 while investigating bot breakage.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@289908 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-16 01:01:40 +00:00
Adrian Prantl e3521eb182 Update for LLVM global variable debug info API change.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@289901 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-16 00:35:42 +00:00
Amjad Aboud d582c5585d [DebugInfo] Changed DIBuilder::createCompileUnit() to take DIFile instead of FileName and Directory.
This way it will be easier to expand DIFile (e.g., to contain checksum) without the need to modify the createCompileUnit() API.

Reviewers: cfe-commits, rnk

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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@289701 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-14 20:24:40 +00:00
David Gross 4c434043b9 [DebugInfo] Add support for __fp16, float, and double constants.
Summary:
Partial fix for PR26619.

Prior to this change, a DIGlobalVariable corresponding to a static
const was marked with an expression corresponding to its constant
value only if it is of integral type.  With this change, we now do the
same if it is of __fp16, float, or double type (that is,
floating-point types that do not exceed 64 bits in size, and hence are
supported easily by the existing LLVM machinery for creating constant
expressions in debug info).

Reviewers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@289094 91177308-0d34-0410-b5e6-96231b3b80d8
2016-12-08 20:02:46 +00:00
Jordan Rose b0eb2871c6 Accept nullability qualifiers on array parameters.
Since array parameters decay to pointers, '_Nullable' and friends
should be available for use there as well. This is especially
important for parameters that are typedefs of arrays. The unsugared
syntax for this follows the syntax for 'static'-sized arrays in C:

  void test(int values[_Nullable]);

This syntax was previously accepted but the '_Nullable' (and any other
attributes) were silently discarded. However, applying '_Nullable' to
a typedef was previously rejected and is now accepted; therefore, it
may be necessary to test for the presence of this feature:

  #if __has_feature(nullability_on_arrays)

One important change here is that DecayedTypes don't always
immediately contain PointerTypes anymore; they may contain an
AttributedType instead. This only affected one place in-tree, so I
would guess it's not likely to cause problems elsewhere.

This commit does not change -Wnullability-completeness just yet. I
want to think about whether it's worth doing something special to
avoid breaking existing clients that compile with -Werror. It also
doesn't change '#pragma clang assume_nonnull' behavior, which
currently treats the following two declarations as equivalent:

  #pragma clang assume_nonnull begin
  void test(void *pointers[]);
  #pragma clang assume_nonnull end

  void test(void * _Nonnull pointers[]);

This is not the desired behavior, but changing it would break
backwards-compatibility. Most likely the best answer is going to be
adding a new warning.

Part of rdar://problem/25846421

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@286519 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-10 23:28:17 +00:00
Amara Emerson ba58685ce8 Add the loop end location to the loop metadata. This additional information
can be used to improve the locations when generating remarks for loops.

Depends on the companion LLVM change r286227.

Patch by Florian Hahn.

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



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@286456 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-10 14:44:30 +00:00
Adrian Prantl 1c1417edc0 Use an artificial debug location for non-virtual thunks.
Thunks are artificial and have no corresponding source location except for the
line number on the DISubprogram, which is marked as artificial.

<rdar://problem/11941095>

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@286400 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-09 21:43:51 +00:00
Adrian Prantl 2123f44cb9 Emit debug info for global constants whose address is taken exactly once.
Add a check to the DeclCache before emitting debug info for a
GlobalVariable a second time and just attach the previsously created one to it.

<rdar://problem/26721101>

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@286322 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-09 00:42:03 +00:00
Adrian Prantl ca5764ab60 Add debug info support for C++11 inline namespaces.
<rdar://problem/18616046>

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@285960 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-03 19:42:14 +00:00
Erich Keane 75c73ad4da regcall: Implement regcall Calling Conv in clang
This patch implements the register call calling convention, which ensures
as many values as possible are passed in registers. CodeGen changes
were committed in https://reviews.llvm.org/rL284108.

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


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@285849 91177308-0d34-0410-b5e6-96231b3b80d8
2016-11-02 18:29:35 +00:00
Victor Leschuk 70d2cb224c DebugInfo: support for DW_TAG_atomic_type
Mark C11 _Atomic variables with DW_TAG_atomic_type tag.

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


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@285625 91177308-0d34-0410-b5e6-96231b3b80d8
2016-10-31 19:09:47 +00:00
Bob Haarman 6ffe536523 [codeview] emit debug info for indirect virtual base classes
Summary:
Fixes PR28281.

MSVC lists indirect virtual base classes in the field list of a class.
This change makes Clang emit the information necessary for LLVM to
emit such records.

Reviewers: rnk, ruiu, zturner

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


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@285132 91177308-0d34-0410-b5e6-96231b3b80d8
2016-10-25 22:19:32 +00:00
Victor Leschuk 1a21ba3207 DebugInfo: pass alignment value only if it was forced
Preparation to implement DW_AT_alignment support:
 - We pass non-zero align value to DIBuilder only when alignment was forced
 - Modify tests to match this change

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


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@284679 91177308-0d34-0410-b5e6-96231b3b80d8
2016-10-20 00:13:19 +00:00
Eli Friedman a32fe9277c Don't crash generating debug info for VLA in function prototype.
Fixes regression from r279445.

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



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@284652 91177308-0d34-0410-b5e6-96231b3b80d8
2016-10-19 22:16:32 +00:00
Victor Leschuk 25d6334178 DebugInfo: use uint32_t for alignment variables.
LLVM now uses uint32_t for DebugInfo alignment for space efficiency,
in this patch we change frontend DebugInfo-related variables to uint32_t too.

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


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@284651 91177308-0d34-0410-b5e6-96231b3b80d8
2016-10-19 22:11:07 +00:00
Manman Ren 4155a0a223 ObjectiveC generics: Add ObjCTypeParamType in the type system.
We also need to add ObjCTypeParamTypeLoc. ObjCTypeParamType supports the
representation of "T <protocol>" where T is a type parameter. Before this,
we use TypedefType to represent the type parameter for ObjC.

ObjCTypeParamType has "ObjCTypeParamDecl *OTPDecl" and it extends from
ObjCProtocolQualifiers. It is a non-canonical type and is canonicalized
to the underlying type with the protocol qualifiers.

rdar://24619481
rdar://25060179

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


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@281355 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-13 17:25:08 +00:00
Peter Collingbourne 48ccf5de8d Update Clang for D20147 ("DebugInfo: New metadata representation for global variables.")
Differential Revision: http://reviews.llvm.org/D20415

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@281285 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-13 01:13:19 +00:00
Reid Kleckner 8488298403 [DebugInfo] Deduplicate debug info limiting logic
We should be doing the same checks when a type is completed as we do
when a complete type is used during emission. Previously, we duplicated
the logic, and it got out of sync. This could be observed with
dllimported classes.

Also reduce a test case for this slightly.

Implementing review feedback from David Blaikie on r281057.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@281278 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-13 00:01:23 +00:00
Reid Kleckner b24c87c65a [DebugInfo] Ensure complete type is emitted with -fstandalone-debug
The logic for upgrading a class from a forward decl to a complete type
was not checking the debug info emission level before applying the
vtable optimization. This meant we ended up without debug info for a
class which was required to be complete. I noticed it because it
triggered an assertion during CodeView emission, but that's a separate
issue.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@281057 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-09 17:03:53 +00:00
Reid Kleckner 23343959a1 [codeview] Extend the heuristic for detecting classes imported from DLLs
If a dynamic class contains a dllimport method, then assume the class
may not be constructed in this DLL, and therefore the vtable will live
in a different PDB.

This heuristic is still incomplete, and will miss things like abstract
base classes that are only constructed on one side of the DLL interface.
That said, this heuristic does detect some cases that are currently
problematic, and may be useful to other projects that don't use many
DLLs.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@281053 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-09 16:27:04 +00:00
Peter Collingbourne 0d892e5f83 CodeGen: Clean up implementation of vtable initializer builder. NFC.
- Simplify signature of CreateVTableInitializer function.
- Move vtable component builder to a separate function.
- Remove unnecessary accessors from VTableLayout class.

This is in preparation for a future change that will alter the type of the
vtable initializer.

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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@280897 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-08 01:14:39 +00:00
Leny Kholodov f43724c2b7 Formatting with clang-format patch r280701
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@280718 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-06 17:06:14 +00:00
Leny Kholodov 794d70eb0a DebugInfo: use llvm::DINode::DIFlags type for debug info flags
Use llvm::DINode::DIFlags type (strongly typed enum) for debug flags instead of unsigned int to avoid problems on platforms with sizeof(int) < 4: we already have flags with values > (1 << 16).

Patch by: Victor Leschuk <vleschuk@gmail.com>

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



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@280701 91177308-0d34-0410-b5e6-96231b3b80d8
2016-09-06 10:48:04 +00:00
Reid Kleckner 3a4bcdc687 [codeview] Don't emit vshape info for classes without vfptrs
Classes with no virtual methods or whose virtual methods were all
inherited from virtual bases don't have a vfptr at offset zero. We were
crashing attempting to get the layout of that non-existent vftable.

We don't need any vshape info in this case because the debugger can
infer it from the base class information. The current class may not
introduce any virtual methods if we are in this situation.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@280287 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-31 20:35:01 +00:00
Reid Kleckner b74f276c3f [codeview] Pass through vftable shape information
The shape is really just the number of methods in the vftable, since we
don't support 16 bit far calls. All calls are near. Encode this number
in the size of the artificial __vtbl_ptr_type DIDerivedType that we
generate. For DWARF, this will be a normal pointer, but for codeview
this will be a wide pointer that gets pattern matched into a
VFTableShape record. Insert this type into the element list of all
dynamic classes when emitting CodeView, so that the backend can emit the
shape even if the vptr lives in a primary base class.

Fixes PR28150

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@280255 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-31 16:11:43 +00:00
David Blaikie ba62c3b9c9 DebugInfo: Add flag to CU to disable emission of inline debug info into the skeleton CU
In cases where .dwo/.dwp files are guaranteed to be available, skipping
the extra online (in the .o file) inline info can save a substantial
amount of space - see the original r221306 for more details there.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@279651 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-24 18:29:58 +00:00
Adrian Prantl e8abf261c4 Add comments. NFC
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@279490 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-22 22:38:16 +00:00
Adrian Prantl a78fa9ec7a Module debug info: Don't assert when encountering an incomplete definition
in isDefinedInClangModule() and assume that the incomplete definition
is not defined in the module.

This broke the -gmodules self host recently.
rdar://problem/27894367

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@279485 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-22 22:23:58 +00:00
David Blaikie b6cce470ec PR29086: DebugInfo: Improve support for fixed array dimensions in variable length arrays
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@279445 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-22 17:49:56 +00:00
Adrian Prantl db4c239f5e Module debug info: Fix a bug in handling record decls without fields.
The previous condition would erroneously mark all CXXRecordDecls
that didn't have any fields as being defined in a clang module.
This patch fixes the condition to only apply to explicit template
instantiations.

<rdar://problem/27771823>

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@278952 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-17 18:27:24 +00:00
Adrian Prantl c884c23225 Debug info: Mark noreturn functions with DIFlagNoReturn.
This affects functions with the C++11 [[ noreturn ]] and C11 _Noreturn
specifiers.

Patch by Victor Leschuk!

https://reviews.llvm.org/D23168

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@278942 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-17 16:20:32 +00:00
Adrian McCarthy 7200cc3073 Emit debug info for dynamic classes if they are imported from a DLL.
With -debug-info-kind=limited, we omit debug info for dynamic classes that live in other TUs. This reduces duplicate type information. When statically linked, the type information comes together. But if your binary has a class derived from a base in a DLL, the base class info is not available to the debugger.

The decision is made in shouldOmitDefinition (CGDebugInfo.cpp). Per a suggestion from rnk, I've tweaked the decision so that we do include definitions for classes marked as DLL imports. This should be a relatively small number of classes, so we don't pay a large price for duplication of the type info, yet it should cover most cases on Windows.

Essentially this makes debug info for DLLs independent, but we still assume that all TUs within the same DLL will be consistently built with (or without) debug info and the debugger will be able to search across the debug info within that scope to resolve any declarations into definitions, etc.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@278861 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-16 22:11:18 +00:00
David Blaikie 7eec719466 PR26423: Assert on valid use of using declaration of a function with an undeduced auto return type
For now just disregard the using declaration in this case. Suboptimal,
but wiring up the ability to have declarations of functions that are
separate from their definition (we currently only do that for member
functions) and have differing return types (we don't have any support
for that) is more work than seems reasonable to at least fix this crash.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@277852 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-05 19:03:01 +00:00
Reid Kleckner e7fe170f97 [codeview] Skip injected class names in nested record emission
We were already trying to do this, but our check wasn't quite right.

Fixes PR28790

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@277367 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-01 18:56:13 +00:00
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