Commit Graph

3388 Commits

Author SHA1 Message Date
Dave Abrahams
8b9772d64e Revert "De-intrinsify and remove the _does*OptionalHaveValue functions."
This reverts commit r22829, because reverting r22828 depends on it.
Reverting r22828 because it
was apparently causing an assertion on the bot:

Swift SVN r22830
2014-10-19 19:54:34 +00:00
Joe Groff
7a24c85ed8 De-intrinsify and remove the _does*OptionalHaveValue functions.
Swift SVN r22829
2014-10-19 00:08:30 +00:00
Dave Abrahams
7eb173e487 Revert "[serialization] Reject loading a module with the wrong case."
This reverts commit r22818, which caused
to fail.

Swift SVN r22822
2014-10-18 01:02:20 +00:00
Jordan Rose
5aa27cea08 [serialization] Reject loading a module with the wrong case.
Due to case-insensitive filesystems, "import foundation" can result in the
overlay module for Foundation being loaded. Everything is confused later on
because the (wrong) module name is used in manglings, leading to all sorts
of issues.

This is not the right fix for the problem, because a user really is allowed
to have modules named "foundation" and "FOUNDATION" and "Foundation" coexisting
on their system. To do that we'll want to check the actual case of a
.framework bundle or .swiftmodule file on disk and make sure it matches before
even trying to load the file. But this is a good sanity check anyway.

rdar://problem/15632996

Swift SVN r22818
2014-10-17 21:48:03 +00:00
Dave Abrahams
90a34d86fa Mangle names of globalinit_{token,func} like other private entities.
This allows making global addressors fragile (They use globalinit_{token,func} for initialization of globals).

It has no noticable performance impact on our benchmarks, but it removes an ugly hack which explicitly
prevented addressors from being fragile.

Swift SVN r22812
2014-10-17 06:02:22 +00:00
Dave Abrahams
e4588e4896 Revert "Mangle names of globalinit_{token,func} like other private entities."
This reverts r22795, because it broke my RelWithDebInfo,
SWIFT_OPTIMIZED=NO build.

Swift SVN r22802
2014-10-16 21:12:11 +00:00
Erik Eckstein
b5cfd00f74 Mangle names of globalinit_{token,func} like other private entities.
This allows making global addressors fragile (They use globalinit_{token,func} for initialization of globals).

It has no noticable performance impact on our benchmarks, but it removes an ugly hack which explicitly
prevented addressors from being fragile.



Swift SVN r22795
2014-10-16 08:24:18 +00:00
Doug Gregor
dfa116600f Archetype builder: introduce "redundant" requirements to better track the requirements written in the source.
Essentially NFC at this point, but can be used for display purposes.

Swift SVN r22776
2014-10-15 21:51:31 +00:00
Devin Coughlin
5a340026c9 [Sema] Update wording of diagnostics for useless #os() checks
For consistency with other diagnostics, they now say "will always be true"
instead of "will always pass."



Swift SVN r22730
2014-10-14 20:46:18 +00:00
Devin Coughlin
d562acb223 [Sema] Change diagnostic of useless #os() check to indicate why it is useless.
This commit updates diagnostic reporting for #os() checks that will always pass.
We now indicate whether the reason the check will always pass is because of the
minimum deployment target or is because of an enclosing scope. In the latter
case, we emit a note indicating the location of the enclosing scope.


Swift SVN r22729
2014-10-14 18:38:48 +00:00
Devin Coughlin
f4e061f2d5 [Sema] Add diagnostic for #os() used outside of if statement guard.
We restrict #os(...) to only the guard condition of if statements. We may want
to loosen this restriction in the future (to, e.g., IfExprs) -- but, in general,
we don't want #os() to appear where static analysis cannot easily determine
its effect.



Swift SVN r22720
2014-10-14 03:27:00 +00:00
Devin Coughlin
6ae6fa7552 [Sema] Add warning for #os() checks that always pass.
Swift SVN r22719
2014-10-14 02:44:11 +00:00
Devin Coughlin
71116b490b [Sema] Use type refinement context of storage as parent for accessor functions.
This commit changes building of type refinement contexts for accessor functions
to use the type refinement context of its associated storage as a parent
rather than its lexically-enclosing context. With this change, we now
associate new child contexts inside property accessors with the TRC of the
property rather than the TRC of the container of the anonymous function created
for the accessor. This commit also adds a dump() debug method to
TypeRefinementContext.


Swift SVN r22718
2014-10-14 01:47:01 +00:00
Devin Coughlin
8ab25ab263 [Sema] Make method availability version ranges contravariant.
Make method/property availability contravariant: the available range of an
override must contain the available range of the overriden declaration.


Swift SVN r22682
2014-10-11 00:44:51 +00:00
Doug Gregor
09688472d2 QoI: Typo correction for mistyped associated types.
Swift SVN r22678
2014-10-10 22:11:15 +00:00
Doug Gregor
489e82cd1d Use the archetype builder’s type resolution more directly.
The type checker was building dependent types manually in a number of places where it would be better to let the archetype builder do it. Use the archetype builder, and start tracking those source locations where we have unresolved nested type names known to the archetype builder.

Swift SVN r22675
2014-10-10 21:39:08 +00:00
Doug Gregor
95e333bce2 Archetype builder: remove uses of lookupQualified to find associated types.
We have the associated types already because they're resolved as soon
as they can be. NFC

Swift SVN r22674
2014-10-10 21:38:36 +00:00
Doug Gregor
886692031a Make IsRecursive a single bit and use more LLVM-ish naming. NFC
Swift SVN r22667
2014-10-10 17:37:10 +00:00
Doug Gregor
40ab2db373 Factor out a visitor for all potential archetypes.
Swift SVN r22666
2014-10-10 17:37:01 +00:00
Doug Gregor
f9a6d88c19 Archetype builder: unify different associated types with the same name across protocols.
When we have two protocol conformance requirements for the same type
T, and each of those protocols has an associated type with a given
(shared) name N, infer a same-type requirement between the two. Only
really enabled for testing now; it doesn't feed into general type
checking yet.

Swift SVN r22649
2014-10-10 00:11:31 +00:00
Joe Groff
f4518aa1b1 Stop banning optional multidimensional array types.
[[T]]? is unambiguous now.

Swift SVN r22646
2014-10-09 23:24:48 +00:00
Doug Gregor
02808fb733 Remove resolvePotentialArchetypeToType() in favor of PotentialArchetype::getDependentType()
The latter uses information that is maintained by the potential
archetype, which makes it more efficient and simpler. NFC

Swift SVN r22645
2014-10-09 22:43:55 +00:00
Doug Gregor
59a355a67b Eliminate the notion of an archetype "index"; it's useless now. NFC
Swift SVN r22644
2014-10-09 22:43:54 +00:00
Doug Gregor
1380f758a5 Archetype builder: resolve nested types to associated types directly.
Effectively NFC because we're not making use of this information yet.

Swift SVN r22643
2014-10-09 21:52:34 +00:00
Doug Gregor
57ff959529 Add conformances with ArchetypeBuilder::PotentialArchetype::addConformance().
This means we'll get proper merging of requirement sources when
merging conformances due to same-type requirements.

Swift SVN r22642
2014-10-09 21:52:33 +00:00
Doug Gregor
f844ab4331 Store the generic type parameter type for non-associated potential archetypes.
This lets us map from potential archetypes back to dependent types
more efficiently, eliminating a linear search.

Swift SVN r22640
2014-10-09 21:52:32 +00:00
Doug Gregor
c4cd133737 Archetype builder: enumerate requirements directly from the potential archetypes.
Use this for the archetype builder debug dump so we can test it
without affecting compilation (yet).

Swift SVN r22639
2014-10-09 21:52:31 +00:00
Doug Gregor
91ddaf59eb Archetype builder: start tracking the locations and reasons for specific requirements.
Whenever we add a requirement, we now know

  (1) Why we added the requirement, e.g., whether it was explicitly written, inferred from a signature, or introduced by an outer scope.
  (2) Where in the source code that requirement originated.

Also add a debugging flag for dumping the archetype builder information, so we can write tests against it.

This is effectively NFC, but it's infrastructure to help a number of requirements-related tasks.

Swift SVN r22638
2014-10-09 21:52:28 +00:00
Devin Coughlin
2e3acba163 Add availability checking for properties to Sema
This commit adds availability checking for properties to Sema. When
EnableExperimentalAvailabilityChecking is enabled, we now emit a diagnostic
when a potentially unavailable property is accessed. To support this, we
now build type refinement contexts for most ValueDecls.


Swift SVN r22622
2014-10-09 17:21:52 +00:00
Joe Groff
9205bf64cf SIL: Remove enum_is_tag.
Swift SVN r22616
2014-10-09 05:03:43 +00:00
Devin Coughlin
b07fd30315 Change ASTWalker to preserve AbstractFunctionDecl body kinds when walking.
This commit changes ASTWalker to preserve AbstractFunctionDecl body kinds. When
walking over an AbstractFunctionDecl, ASTWalker calls setBody() on the
declaration to update the body after traversal. Prior to this commit, setBody()
would unconditionally set the body kind to BodyKind::Parsed --- that is,
traversing the AST would change the body kind to Parsed. In some cases, this
modified a body kind from TypeChecked to Parsed, causing a small number of
standard library functions to be type checked twice. This behavior also
interferes with the creation of type refinement contexts for variable accessor
functions (coming in a future commit).

This commit adds an additional parameter to setBody() that allows callers to
provide a body kind (this defaults to Parsed) and changes ASTWalker to preserve
the body kind when walking a AbstractFunctionDecl.



Swift SVN r22607
2014-10-08 18:56:57 +00:00
Joe Groff
dc4d3818e0 De-intrinsify the _injectValueInto functions.
The runtime still invokes them, so we can't quite extricate them from the stdlib yet, but the compiler no longer needs them.

Swift SVN r22550
2014-10-06 20:45:37 +00:00
Joe Groff
cac5807ae2 SILGen: Emit "main" as a SIL function.
Eliminate the intermediate top_level_code function. Now that SIL is expressive enough to express a "main" function, there's no reason for it, and this eliminates a bunch of mystery code in IRGen to thunk from main to top_level_code by reaching for hardcoded symbol names. Demystify the special code for setting up C_ARGC and C_ARGV by having SILGen look for a transparent "_didEnterMain" hook in the stdlib and emit a call to it.

Swift SVN r22525
2014-10-05 04:13:24 +00:00
Roman Levenstein
6cabeeec02 Add a few helper methods for finding method implementations or overrides inside a given class or its superclasses. This can be used e.g. by the upcoming devirtualizer changes.
Swift SVN r22520
2014-10-04 09:49:43 +00:00
Devin Coughlin
59814bd140 Add type checking for potentially unavailable method references.
This commit modifies Sema to add type checking for potentially unavailable
method references. We now record the reason for method unavailability when
recording a potential overload choice during member constraint simplification
and either diagnose or lift to an optional type during CSApply. This commit also
generalizes UnavailableToOptionalExpr to take an arbitrary subexpression.

This commit does not address potentially unavailable properties, initializers,
or dynamic member references.


Swift SVN r22508
2014-10-03 23:23:13 +00:00
Doug Gregor
52b9368d3a Thread a LazyResolver through the archetype builder.
We're not really relying on this for anything yet.

Swift SVN r22507
2014-10-03 22:39:24 +00:00
Doug Gregor
73fb0f74f0 Give PotentialArchetype::getType() access to the archetype builder. NFC
Swift SVN r22506
2014-10-03 22:39:24 +00:00
Doug Gregor
49e3762038 Archetype builder: eliminate the "archetype assignment" phase.
Of course, all clients basically just walk the "all archetypes" list
anyway, so this is NFC.

Swift SVN r22505
2014-10-03 22:39:23 +00:00
Doug Gregor
c9e0ed1e23 Archetype builder: move the "root" protocol into the potential archetype. NFC
Storing the root protocol outside the potential archetype meant we
could easily have forgotten to pass the right argument to
PotentialArchetype::getType(). Our current staging of archetype
construction means that nothing go it wrong today, but it's a minor
minefield for future improvements to the archetype builder.

Swift SVN r22504
2014-10-03 22:39:22 +00:00
Doug Gregor
56f8e8c5b0 Eliminate the primary archetype map from the archetype builder. NFC
The information in the primary archetype map was redundant with what is
stored in the potential archetypes map and the potential archetypes
themselves.

Swift SVN r22502
2014-10-03 22:39:20 +00:00
Joe Groff
949e0b0741 Drop the @sil_self attribute.
We no longer need to abuse Self archetypes to represent values inside existential containers.

Swift SVN r22487
2014-10-03 03:09:45 +00:00
Jordan Rose
3fcdfd40e9 Remove the "swift/Basic/Optional.h" header.
llvm::Optional lives in "llvm/ADT/Optional.h". Like Clang, we can get
Optional in the 'swift' namespace by including "swift/Basic/LLVM.h".

We're now fully switched over to llvm::Optional!

Swift SVN r22477
2014-10-02 18:51:45 +00:00
Jordan Rose
042569a3be Optional: Replace uses of Nothing with None.
llvm::Optional (like Swift.Optional!) uses None as its placeholder value,
not Nothing.

Swift SVN r22476
2014-10-02 18:51:42 +00:00
Jordan Rose
d3a9e58133 Use Nothing instead of {} to initialize Optionals.
In preparation for the switch to llvm::Optional, which has an explicit
default constructor.

Swift SVN r22470
2014-10-02 18:51:33 +00:00
Jordan Rose
49a6c8eb7b Do all target info management in Clang, and drop -target-abi / -target-feature.
Previously we hardcoded a few important default CPUs, ABIs, and features into
Swift's driver, duplicating work in Clang. Now that we're using Clang's
driver to create the Clang "sub-compiler", we can delegate this work to Clang.

As part of this, I've dropped the options for -target-abi (which was a
frontend-only option anyway) and -target-feature (which was a hidden driver
option and is a frontend-only option in /Clang/). We can revisit this later
if it becomes interesting. I left in -target-cpu, which is now mapped
directly to Clang's -mcpu=.

Swift SVN r22449
2014-10-01 23:55:40 +00:00
John McCall
88b8254057 Lift the restrictions on addressors so that you can
define properties and subscripts with the
get+mutableAddress combination of accessors.

Fix a couple of simple problems this exposes.

rdar://17270560

Swift SVN r22419
2014-10-01 02:05:23 +00:00
John McCall
dc1831940b Missing bits of r22381: make something a bitfield
that was meant to be and bump the serialization
version.

Swift SVN r22390
2014-09-30 17:09:36 +00:00
Joe Groff
a89949183d Give opened existential archetypes globally unique identifiers.
This lets us reliably print and parse opened archetypes across different compiler invocations. Using a source-related locator would be ideal, but that's complicated by the need to manufacture, print, and parse these things during SIL passes, so cop out and burn a UUID for now.

Swift SVN r22385
2014-09-30 14:07:31 +00:00
John McCall
8c303ef7a6 Representational changes towards get-and-mutableAddress
properties.

The main design change here is that, rather than having
purportedly orthogonal storage kinds and has-addressor
bits, I've merged them into an exhaustive enum of the
possibilities.  I've also split the observing storage kind
into stored-observing and inherited-observing cases, which
is possible to do in the parser because the latter are
always marked 'override' and the former aren't.  This
should lead to much better consideration for inheriting
observers, which were otherwise very easy to forget about.
It also gives us much better recovery when override checking
fails before we can identify the overridden declaration;
previously, we would end up spuriously considering the
override to be a stored property despite the user's
clearly expressed intent.

Swift SVN r22381
2014-09-30 08:39:38 +00:00
Devin Coughlin
3749a98763 Record the reason a declaration is potentially unavailable.
This commit adds tracking of the reason a declaration reference is potentially
unavailable to the UnavailableToOptionalExpr AST node and to OverloadChoice. We
will use this reason during SILGen to emit the appropriate run-time check and
during typechecking to provide more helpful diagnostics.

To keep OverloadChoice as small as possible, we encode the reason as an index
into a vector of reasons stored in a given instance of ConstraintSystem (this is
the same approach that Fix takes).

This commit adds Sema/OverloadChoice.cpp (for the parts of OverloadChoice that
now rely on ConstraintSystem) and AST/Availability.h (to bring in
availability-related structures without TypeRefinementContext).


Swift SVN r22377
2014-09-30 01:53:59 +00:00