Commit Graph

4303 Commits

Author SHA1 Message Date
Andrew Trick
978b2fc80b Fix terminology. There's no such thing as a "formal SIL type".
Formal types are defined by the language's type system. SIL types are
lowered. They are no longer part of that type system.

The important distinction here is between the SIL storage type and the SIL value
type. To make this distinction clear, I refer to the SILFunctionTypes "formal"
conventions. These conventions dictate the SIL storage type but *not* the SIL
value type. I call them "formal" conventions because they are an immutable
characteristic of the function's type and made explicit via qualifiers on the
function type's parameters and results. This is in contrast to to SIL
conventions which depend on the SIL stage, and in the short term whether the
opaque values flag is enabled.
2017-01-26 15:35:48 -08:00
Andrew Trick
1abeddcc5d [SILType] SILFunctionConventions API.
Separate formal lowered types from SIL types.
The SIL type of an argument will depend on the SIL module's conventions.
The module conventions are determined by the SIL stage and LangOpts.

Almost NFC, but specialized manglings are broken incidentally as a result of
fixes to the way passes handle book-keeping of aruments. The mangler is fixed in
the subsequent commit.

Otherwise, NFC is intended, but quite possible do to rewriting the logic in many
places.
2017-01-26 15:35:48 -08:00
Hugh Bellamy
35eaf68461 Fix warnings for llvm::Triple::Wasm after updating LLVM to upstream
> warning C4062: enumerator 'llvm::Triple::Wasm' in switch of enum
'llvm::Triple::ObjectFormatType' is not handled
2017-01-26 10:12:23 +00:00
Erik Eckstein
a56a97c89f Mangling: prepare for using new mangling for USR and debug-info type generation.
Select between old and new mangling as we already do in other places in the compiler.
NFC as long as the new mangling is not enabled yet.
2017-01-23 17:49:00 -08:00
Erik Eckstein
db255b90b5 Fix an assertion in IRGen while checking for escaping metatypes.
rdar://problem/30146045

Sorry, no test file for this. I couldn’t come up with a reduced test case.
2017-01-23 10:35:28 -08:00
Michael Gottesman
d045f20867 [semantic-sil] Add a new instruction end_borrow_argument.
I need this instruction in order to model the end of life of a guaranteed phi
arguments.

rdar://29791263
2017-01-22 20:46:25 -08:00
Slava Pestov
703a63fc96 Merge pull request #6908 from slavapestov/sema-substitution-fixes
Sema fixes for SE-0110
2017-01-19 20:36:45 -08:00
Slava Pestov
7b5cf4ab7d Merge pull request #3841 from tinysun212/pr-swiftc-cygwin-2
[swiftc] Fixed for Cygwin
2017-01-19 20:17:47 -08:00
Slava Pestov
c86b5ae427 AST: Header file gardening - include what you use 2017-01-19 20:07:06 -08:00
eeckstein
b861853f53 Merge pull request #6912 from eeckstein/dead-conf-elim
Remove dead witness tables, including dead witness functions.
2017-01-19 14:11:12 -08:00
swift-ci
0e8dc4443d Merge pull request #6916 from gottesmm/unmanaged_retainrelease_value 2017-01-19 14:05:08 -08:00
Michael Gottesman
2da18c7b47 [semantic-sil] Add special unmanaged_{retain,release}_value instructions for unpaired retain/release operations in semantic sil.
The reason why I am introducing special instructions is so I can maintain the
qualified ownership API wedge in between qualified SIL and the rest of the ARC
instructions that are pervasively used in the compiler.

These instructions in the future /could/ be extended to just take @sil_unmanaged
operands directly, but I want to maintain flexibility to take regular
non-trivial operands in the short term.

rdar://29791263
2017-01-19 13:23:08 -08:00
Arnold Schwaighofer
67ef994936 Merge pull request #6900 from aschwaighofer/fix_silence_warn_unused_result_warning
Silence warn_unused_result warnings
2017-01-19 13:22:57 -08:00
Erik Eckstein
89c9ff5ca0 SIL: ConformanceCollector utility for collecting all conformances which are used by a SIL instruction.
Also verify the correctness of ConformanceCollector in IRGen by checking if IRGen does not use a conformance which is not collected by the utility.
2017-01-19 09:41:09 -08:00
Erik Eckstein
cb0ebae078 Derive the SIL linkage of a witness table from the minimum of the protocol’s and conforming type’s visibility.
For example, if an internal type conforms to a public protocol, the witness table should get internal linkage.
Previously we only considered the visibility of the protocol.

Fragile witness tables still have to get public symbol linkage. This is now handled in IRGen (like we do it for functions).
2017-01-19 07:58:10 -08:00
Erik Eckstein
7dab73e980 Don’t try to de-serialize witness tables in IRGen 2017-01-19 07:58:10 -08:00
Arnold Schwaighofer
1f914eb4c4 Silence warn_unused_result warnings 2017-01-18 15:20:27 -08:00
Han Sangjin
b8dd577693 [swiftc] Fixed for Cygwin
Fixed for the difference of Cygwin with other Windows variants (MSVC,
Itanium, MinGW).

- The platform name is renamed to "cygwin" from "windows" which is used
  for searching the standard libraries.

- The consideration for DLL storage class (DllExport/DllImport) is not
  required for Cygwin and MinGW. There is no problem when linking in
  these environment.

- Cygwin should use large memory model as default.(This may be changed
  if someone ports to 32bit)

- Cygwin and MinGW should use the autolink feature in the sameway of
  Linux due to the linker's limit.
2017-01-19 05:48:24 +09:00
Arnold Schwaighofer
9ddf115b0a IRGen: Don't try to emit non-global variables of imported inline c functions
The previous check would fail because isExternallyVisible() is false for local
static variables with internal linkage.

rdar://29937443
2017-01-18 11:05:20 -08:00
Bob Wilson
eeb0f08988 Merge remote-tracking branch 'origin/master' into master-next 2017-01-17 10:45:44 -08:00
adrian-prantl
f267521ac9 Merge pull request #6632 from adrian-prantl/28859432
Clean up the constructors of DebugTypeInfo
2017-01-15 18:24:32 -08:00
Bob Wilson
34514513fd Merge remote-tracking branch 'origin/master' into master-next 2017-01-15 17:34:17 -08:00
Hugh Bellamy
397f25e43b Use LLVM_ATTRIBUTE_NOINLINE instead of __attribute__((noinline)) 2017-01-14 12:46:14 +00:00
Adrian Prantl
6633ae0b6e Stop special-casing function types when constructing DebugTypeInfo objects.
Prior to this patch, debug info was storing the original swift type
for function objects. This could be very wrong in optimized code. This
patch stores the lowered function type in the debug info and adds the
necessary type reconstruction code (tested via the LLDB testsuite) to
allow reconstructing a Swift type from a mangled lowered type.

<rdar://problem/28859432>
2017-01-13 15:57:07 -08:00
Adrian Prantl
bb55c6d8a6 Clean up the constructors of DebugTypeInfo
and ensure that the DeclContext of the SILFunction is used when
mangling substituted archetypes found in inlined variable declarations
that have been reparented into the caller

<rdar://problem/28859432>
2017-01-13 15:56:27 -08:00
Arnold Schwaighofer
d6dd8e83bc Hack to workaround a clang lto bug
We hit an assert in AllocStackHoisting that is only triggered in a release lto
build.

Clang forwards the read of parent basic block of 'AssignedLoc' in the next
statement:

  auto *EntryBB = AssignedLoc->getFunction()->getEntryBlock(); // read AssignedLoc->ParentBB
  AssignedLoc->removeFromParent(); // writes AssignedLoc->ParentBB

To this read:

  EntryBB->push_front(AssignedLoc); // read AssignedLoc->ParentBB and assert if non-null, *should reload*

As a temporary workaround outline code to prevent the miscompile.

rdar://29982182
2017-01-13 08:42:02 -08:00
Bob Wilson
c765d5e3a5 Merge remote-tracking branch 'origin/master' into master-next 2017-01-12 15:58:19 -08:00
Doug Gregor
a232b41f87 [Archetype builder] Use archetype anchors exclusively in requirements.
When enumerating requirements, always use the archetype anchors to
express requirements. Unlike "representatives", which are simply there
to maintain the union-find data structure used to track equivalence
classes of potential archetypes, archetype anchors are the
ABI-stable canonical types within a fully-formed generic signature.

The test case churn comes from two places. First, while
representatives are *often* the same as the archetype anchors, they
aren't *always* the same. Where they differ, we'll see a change in
both the printed generic signature and, therefore, it's
mangling.

Additionally, requirement inference now takes much greater
care to make sure that the first types in the requirement follow
archetype anchor ordering, so actual conformance requirements occur in
the requirement list at the archetype anchor---not at the first type
that is equivalent to the anchor---which permits the simplification in
IRGen's emission of polymorphic arguments.
2017-01-12 11:07:05 -08:00
swift-ci
808c48401f Merge pull request #6743 from swiftix/wip-partial-pre-specializations-wip-layout-constraints 2017-01-12 10:12:44 -08:00
Roman Levenstein
29180ca1a0 Add support for layout requirements with layout constraints.
This commit introduces new kind of requirements: layout requirements.

This kind of requirements allows to expose that a type should satisfy certain layout properties, e.g. it should be a trivial type, have a given size and alignment, etc.
2017-01-11 19:21:45 -08:00
Janosch Hildebrand
b889e7e83b [IRGen] Request LLDB specific tuning for all targets. (#5971)
Previously the default was used, implying LLDB specific tuning only for Darwin targets.
2017-01-11 10:15:33 -08:00
Slava Pestov
846caf6e38 Merge pull request #6723 from modocache/irgen-comment-typo
[IRGen] Add word missing from comment (NFC)
2017-01-10 22:54:01 -08:00
Brian Gesiak
b769d9941d [IRGen] Add word missing from comment (NFC)
The sentence in the comment trailed off even when it was added in
64a6a739, but the author may have meant putting arbitrary keys in the
Objective-C image info.
2017-01-10 23:28:21 -05:00
Michael Gottesman
d944930591 Remove the deallocating convention.
This is dead code and can be re-added if it is needed. Right now though there
really isnt a ValueOwnershipKind that corresponds to deallocating and I do not
want to add a new ValueOwnershipKind for dead code.
2017-01-10 17:32:17 -08:00
Bob Wilson
37e7d1c627 Merge remote-tracking branch 'origin/master' into master-next 2017-01-08 17:07:46 -08:00
Brian Gesiak
663b92ece9 [AST] Completely replace Module with ModuleDecl
The typedef `swift::Module` was a temporary solution that allowed
`swift::Module` to be renamed to `swift::ModuleDecl` without requiring
every single callsite to be modified.

Modify all the callsites, and get rid of the typedef.
2017-01-08 00:36:08 -05:00
practicalswift
adc75d6806 [gardening] Add "// end anonymous namespace" where appropriate 2017-01-07 20:18:21 +01:00
AnnaZaks
1122ebd731 Merge pull request #6453 from apple/asan
[tsan] Do not report races coming from deinitializers and _Block_release
2017-01-06 11:50:28 -08:00
practicalswift
6d1ae2a39c [gardening] 2016 → 2017 2017-01-06 16:41:22 +01:00
Bob Wilson
4ca0676a34 Merge remote-tracking branch 'origin/master' into master-next 2017-01-05 17:11:16 -08:00
Anna Zaks
18c10c566f [tsan] Do not report races coming from deinitializers and _Block_release
TSan does not observe the guaranteed syncronization between the ref
count drop to zero and object destruction. This can lead to false positive
reports.

This patch adds an attribute to deinitializers to ignore memory accesses
at run time. It also moves the logic to add sanitizer attributes from
IRGenFunction to IRGenSILFunction, which means that the automatically
generated code such as _Block_release handler will not be instrumented
and the accesses made in them will be invisible to TSan.

Solves a problem similar to what's addressed in clang commit:
https://reviews.llvm.org/D25857
2017-01-05 10:26:25 -08:00
practicalswift
998d3d932a Merge pull request #6370 from practicalswift/initialize-doneBB
[gardening] Initialize doneBB to nullptr to avoid calling IGF.BuilderCreateBr(…) and IGF.Builder.emitBlock(…) with uninitialized arguments.
2017-01-05 09:04:55 +01:00
Slava Pestov
2082129516 IRGen: Teach emitValueWitnessTableRefForLayout() to handle Optionals
There was a regression from Swift 3 here, we didn't correctly handle
the fact that optional payloads are now lowered, and so IRGen would
crash if an optional payload consisted of a tuple with both a
generic parameter and a function type.

Fixes <https://bugs.swift.org/browse/SR-3548>.
2017-01-04 21:31:09 -08:00
Slava Pestov
064fda52d2 AST: Remove Type::getCanonicalTypeOrNull()
Not sure why but this was another "toxic utility method".
Most of the usages fell into one of three categories:

- The base value was always non-null, so we could just call
  getCanonicalType() instead, making intent more explicit

- The result was being compared for equality, so we could
  skip canonicalization and call isEqual() instead, removing
  some boilerplate

- Utterly insane code that made no sense

There were only a couple of legitimate uses, and even there
open-coding the conditional null check made the code clearer.

Also while I'm at it, make the SIL open archetypes tracker
more typesafe by passing around ArchetypeType * instead of
Type and CanType.
2017-01-04 01:08:29 -08:00
Slava Pestov
645d262f77 IRGen: Fix Clang type conversion for pointers to optionals of metatypes
Be sure to lower the payload type of UnsafeMutablePointer and friends
before converting them, because the Clang type converter expects
optionals to have lowered payloads already.

Also, remove the FunctionType path; with the above change AST-level
function types should no longer show up here.

Fixes <https://bugs.swift.org/browse/SR-2702>.
2017-01-03 21:27:28 -08:00
Joe Shajrawi
66e45979c7 Merge pull request #6451 from shajrawi/outline_enum_retain_release
[IRGen] Code Size Reduction: Outline Copy/Consume (Loadable) Enum
2017-01-03 18:39:54 -08:00
Saleem Abdulrasool
1aecddbdef Adjust for SVN r290153
DIGlobalVariable had the associated expression separated into a
DIGlobalVariableExpression which ties the DIGlobalVariable and the
DIExpression together.
2017-01-03 14:30:55 -08:00
Saleem Abdulrasool
6d47571baf Adjust for SVN r289702
The File and Directory parameters to CreateCompileUnit have been changed to a
single DIFile parameter to permit future expansion.
2017-01-03 14:30:07 -08:00
Saleem Abdulrasool
f818cec189 Adjust for SVN r289647
The static data references to the floating point semantics have been converted
to accessor functions.  Adjust accordingly.
2017-01-03 14:29:37 -08:00
Bob Wilson
78b28243ff Merge remote-tracking branch 'origin/master' into master-next 2017-01-03 14:22:59 -08:00