Commit Graph

1680 Commits

Author SHA1 Message Date
Joe Groff
b7566dacdb IRGen: Lowering for key paths with indices. 2017-09-15 10:24:28 -07:00
Erik Eckstein
5d56a73664 IRGen: fix generation of statically initialized objects with a larger alignment than the default.
fixes rdar://problem/34263821
2017-09-05 15:39:16 -07:00
Jordan Rose
f8b7db4e76 Excise the terms "blacklist" and "whitelist" from Swift source. (#11687)
The etymology of these terms isn't about race, but "black" = "blocked"
and "white" = "allowed" isn't really a good look these days. In most
cases we weren't using these terms particularly precisely anyway, so
the rephrasing is actually an improvement.
2017-08-30 09:28:00 -07:00
Erik Eckstein
9c6fe76927 SIL, IRGen: add instructions "object" and "global_value” to support statically initialized objects.
This commit contains:
-) adding the new instructions + infrastructure, like parsing, printing, etc.
-) support in IRGen to generate global object-variables (i.e. "heap" objects) which are statically initialized in the data section.
-) IRGen for global_value which lazily initializes the object header and returns a reference to the object.

For details see the documentation of the new instructions in SIL.rst.
2017-08-23 09:15:49 -07:00
Erik Eckstein
1ab582e121 SIL: A new representation of static initializers for global variables.
Static initializers are now represented by a list of literal and aggregate instructions in a SILGlobalVariable.
For details see SIL.rst.

This representation is cleaner than what we did so far (point to the initializer function and do some pattern matching).

One implication of that change is that now (a subset of) instructions not necessarily have a parent function.
Regarding the generated code it's a NFC.
Also the swift module format didn't change because so far we don't serializer global variables.
2017-08-23 09:15:01 -07:00
Andrew Trick
5aac427ee0 SIL Ownership: Remove consumptionKind from SIL unconditional cast and related logic.
Remove the cast consumption kind from all unconditional casts. It
doesn't make sense for unconditional casts, complicates SIL ownership,
and wasn't fully supported for all variants. Copies should be
explicit.
2017-08-18 20:44:54 -07:00
George Karpenkov
efe143c2f4 Adding support for -sanitize=fuzzer flag (#11381)
Similarly to Clang, the flag enables coverage instrumentation, and links
`libLLVMFuzzer.a` to the produced binary.
Additionally, this change affects the driver logic, and enables the
concurrent usage of multiple sanitizers.
2017-08-07 18:16:51 -07:00
John McCall
d4d2145ad8 Merge branch 'master' into master-next 2017-07-29 15:48:00 -04:00
John McCall
a0f20f673d Switch all of the indirect-call code in IRGen to FunctionPointer.
To make this stick, I've disallowed direct use of that overload of
CreateCall.  I've left the Constant overloads available, but eventually
we might want to consider fixing those, too, just to get all of this
code out of the business of manually remembering to pass around
attributes and calling conventions.

The test changes reflect the fact that we weren't really setting
attributes consistently at all, in this case on value witnesses.
2017-07-28 23:26:35 -04:00
Adrian Prantl
ff0397bdaa Update to upstream llvm changes (remove offset from llvm.dbg.value)
rdar://problem/33580047
2017-07-28 14:16:10 -07:00
Chris Bieneman
9c35042ae6 Merge remote-tracking branch 'origin/master' into master-next 2017-07-28 09:51:36 -07:00
John McCall
6e4c83d30b Remove the need for magic numbers when making an ExternalUnion. NFC. 2017-07-27 22:52:51 -04:00
Bob Wilson
5f02db4d3e Merge remote-tracking branch 'origin/master' into master-next 2017-07-20 21:59:23 -07:00
John McCall
750d397909 Substantially rework how IRGen handles function pointers.
The goals here are four-fold:
  - provide cleaner internal abstractions
  - avoid IR bloat from extra bitcasts
  - avoid recomputing function-type lowering information
  - allow more information to be propagated from the function
    access site (e.g. class_method) to the call site

Use this framework immediately for class and protocol methods.
2017-07-20 14:33:18 -04:00
swift-ci
5365cd048a Merge remote-tracking branch 'origin/master' into master-next 2017-07-18 23:48:51 -07:00
John McCall
efd6e3b31c Avoid creating a SmallVector to store the common cases
of singleton and empty explosions.  NFC.
2017-07-19 02:08:13 -04:00
John McCall
753efb4d9f Switch LoweredValue to use ExternalUnion; NFC. 2017-07-19 02:08:13 -04:00
swift-ci
7063af3307 Merge remote-tracking branch 'origin/master' into master-next 2017-07-18 00:28:52 -07:00
Andrew Trick
4db2a46cff Add SIL instruction: open_existential_box_value.
This has the same semantics as open_existential_box, but returns an object value
instead of an address.

This is used in SIL opaque values mode. Attempting to reuse open_existential_box
in this mode causes SIL type inconsistencies that are too difficult to work
around. Adding this instruction allows for consistent handling of opaque values.

The original versions of several of these currently redundant instructions will
be removed once the SIL representation stabilizes.
2017-07-17 23:46:41 -07:00
Andrew Trick
f657ad2d3a Rename *ExistentialOpaque instructions to *ExistentialValue.
These instructions have the same semantics as the *ExistentialAddr instructions
but operate directly on the existential value, not its address.

This is in preparation for adding ExistentialBoxValue instructions.
The previous name would cause impossible confusion with "opaque existentials"
and "opaque existential boxes".
2017-07-17 23:46:41 -07:00
swift-ci
e98182387b Merge remote-tracking branch 'origin/master' into master-next 2017-07-11 12:23:35 -07:00
Joe Groff
101788dbd4 IRGen: Support for computed properties with dependent generic context.
Use the KeyPath implementation's new support for instantiating and dealing with captures to lower the generic context required to dispatch computed accessors with dependent generics.
2017-07-06 20:07:41 -07:00
swift-ci
c076bd8374 Merge remote-tracking branch 'origin/master' into master-next 2017-06-02 19:28:33 -07:00
Arnold Schwaighofer
ca63326e1b Delete unused existential value witnesses from the old existential
implementation

And remove the SWIFT_RUNTIME_ENABLE_COW_EXISTENTIALS flag.
2017-06-02 14:34:41 -07:00
swift-ci
fe6e639845 Merge remote-tracking branch 'origin/master' into master-next 2017-05-26 15:48:42 -07:00
Adrian Prantl
5e161736ab Reuse the previous instruction's scope for line 0 locations
for easier-to-read debug info.

This has no practical effect otherwise.
2017-05-26 13:44:19 -07:00
Adrian Prantl
9bde90c3a8 Use range-based for loop. NFC 2017-05-26 13:21:49 -07:00
swift-ci
1daeac92f5 Merge remote-tracking branch 'origin/master' into master-next 2017-05-23 19:10:58 -07:00
Adrian Prantl
05ada87d46 Emit the code to setup debug shadow copies of variables in the same scope
as the variable is in. If ASAN inserts additional basic blocks to sanitize
the store, it will reuse the location and scope. If the scope is not a
descendant of the scope of the variable an optimization in the live debug
values pass will kill all DEBUG_VALUEs and thus prevent them from being
propagated.

rdar://problem/30433661
2017-05-23 17:11:03 -07:00
swift-ci
60798f8110 Merge remote-tracking branch 'origin/master' into master-next 2017-05-12 16:08:30 -07:00
John McCall
6660d18d39 Don't apply dynamic enforcement to empty types.
rdar://32039394
2017-05-12 18:03:02 -04:00
Max Moiseev
614bb13cbf Merge remote-tracking branch 'origin/master' into master-next 2017-05-11 11:29:22 -07:00
John McCall
ab250848b4 Downgrade dynamic exclusivity failures to a warning in Swift 3 compatibility mode. 2017-05-10 14:44:59 -04:00
John McCall
e01c31a17c Remember a PC in the exclusivity-tracking set and report it during failures. 2017-05-10 14:44:56 -04:00
swift-ci
502bda365b Merge remote-tracking branch 'origin/master' into master-next 2017-05-05 13:48:34 -07:00
practicalswift
492f5cd35a [gardening] Remove redundant repetition of type names (DRY): RepeatedTypeName foo = dyn_cast<RepeatedTypeName>(bar)
Replace `NameOfType foo = dyn_cast<NameOfType>(bar)` with DRY version `auto foo = dyn_cast<NameOfType>(bar)`.

The DRY auto version is by far the dominant form already used in the repo, so this PR merely brings the exceptional cases (redundant repetition form) in line with the dominant form (auto form).

See the [C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#es11-use-auto-to-avoid-redundant-repetition-of-type-names) for a general discussion on why to use `auto` to avoid redundant repetition of type names.
2017-05-05 09:45:53 +02:00
swift-ci
d435c194ba Merge remote-tracking branch 'origin/master' into master-next 2017-05-04 09:28:57 -07:00
adrian-prantl
c6ef8022ae Merge pull request #9195 from adrian-prantl/17260802
Debug info: Represent clang-imported submodules.
2017-05-04 09:20:20 -07:00
swift-ci
3f3f9f6563 Merge remote-tracking branch 'origin/master' into master-next 2017-05-03 14:08:58 -07:00
John McCall
16c500d100 Fix IRGenSIL to always look through DynamicallyEnforcedAddress.
rdar://31964550
2017-05-03 16:01:11 -04:00
Adrian Prantl
0cb4a2865d Refactor/Cleanup IRGenDebugInfo to use a private implementation (NFC) 2017-05-03 08:34:06 -07:00
swift-ci
1378be1c6d Merge remote-tracking branch 'origin/master' into master-next 2017-05-01 15:55:31 -07:00
Joe Shajrawi
0d0cac357a retain_value_addr and release_value_addr SIL instructions: take as an input an address, load the value inside it and call retain_value and release_value respectively 2017-04-30 10:23:55 -07:00
swift-ci
cce9eb4f8d Merge remote-tracking branch 'origin/master' into master-next 2017-04-23 01:48:58 -07:00
John McCall
978f0e05fe Add unpaired access marker instructions and use them to implement
dynamic access tracking in materializeForSet.
2017-04-22 22:52:13 -04:00
swift-ci
4ef7b46971 Merge remote-tracking branch 'origin/master' into master-next 2017-04-21 18:08:32 -07:00
Joe Groff
595e0e4ede Merge branch 'master' into keypaths 2017-04-19 18:38:24 -07:00
swift-ci
000387aa9e Merge remote-tracking branch 'origin/master' into master-next 2017-04-18 16:28:31 -07:00
practicalswift
56a9c88ca6 [gardening] Remove unused method getLoweredDynamicallyEnforcedAddress(SILValue) 2017-04-18 23:22:43 +02:00
swift-ci
ae1eb1197c Merge remote-tracking branch 'origin/master' into master-next 2017-04-18 11:08:33 -07:00