Commit Graph

3016 Commits

Author SHA1 Message Date
Stephen Lin
4ebdf9c80f Capture Promotion: have new closures inserted before their original versions
Swift SVN r10554
2013-11-19 03:29:00 +00:00
Joe Groff
f6b1745650 SIL: Remove 'ModuleInst'.
Module values could never be used for anything, and we have SILUndef now, so when SILGen sees a ModuleExpr, we can just emit 'undef'.

Swift SVN r10548
2013-11-18 21:36:08 +00:00
Dmitri Hrybenko
c2c15e401b Disallow use of module values
rdar://15000289


Swift SVN r10546
2013-11-18 20:45:50 +00:00
Chris Lattner
22240080b1 move SILFunction::dump out of line, so that LLDB can find it.
Swift SVN r10544
2013-11-18 17:53:39 +00:00
Dmitri Hrybenko
81dc5deee8 Change 'def' keyword back to 'func'
Swift SVN r10522
2013-11-17 07:45:28 +00:00
Joe Groff
562e2bfff6 Runtime: Add swift_once function.
For now, just shim over dispatch_once.

Swift SVN r10514
2013-11-16 03:11:17 +00:00
Anna Zaks
f4e6b746f5 Better handling of overflow diagnostics when user types are not available.
Currently, we use heuristics to determine if the conversion errors come from directly inlining the std integer types. However, if those operations are wrapped in another transparent function, we will not see the user-visible integer types anymore, so we fall back to Builtin types. Enhance the diagnostics in that case to specify if the sign-agnostic Builtin types are signed or unsigned.

This reverts r10484 and adds test cases.

Swift SVN r10512
2013-11-16 01:26:53 +00:00
Joe Groff
a049ee9d38 SILGen: (Optionally) emit lazy initializers and accessor fns for globals.
For every global pattern binding, emit a lazy initializer token and function that initializes the global variables in that binding. For each of those vars, create an accessor that Builtin.once's the lazy initializer before producing the address. Hide this all behind a switch till the surrounding serialization and IRGen infrastructure catches up.

Swift SVN r10511
2013-11-16 00:50:19 +00:00
Joe Groff
4c0ebedc6a SIL: Add SILGlobalAddrInst.
Like GlobalAddrInst, but for SILGlobalVariables. These would become the same instruction when SILGlobalVariable can replace AST-level global references.

Swift SVN r10510
2013-11-16 00:50:18 +00:00
Joe Groff
0cc9417fef SIL: Introduce a SILGlobalVariable concept.
This will let us control linkage and emit new variables independent of the AST in SILGen. In particular, for lazy global initialization, we need to emit a unique internal once predicate for every top-level pattern binding. Switching everything over is a bit much to reengineer all at once, so for now, it can coexist with the globals map that is already there.

Swift SVN r10509
2013-11-16 00:50:17 +00:00
Joe Groff
ab65140a2e Add a 'Builtin.once' builtin.
This lowers to a call to a to-be-written swift_once runtime function and will be used for lazy global initialization. Having this be a builtin seemed appropriate to me given that:

- references to it will be implicitly emitted by SILGen for global initializers.
- there are restrictions on its correct use that are currently impossible to express in the language outside of the stdlib.

Swift SVN r10508
2013-11-16 00:50:12 +00:00
Enrico Granata
aa0bc1f697 Start demangling the new Qq production that Adrian introduced in r10470
Swift SVN r10478
2013-11-15 00:18:45 +00:00
Anna Zaks
f651e342c1 Add static checking for signed <-> unsigned int conversions (for same size ints).
Swift SVN r10477
2013-11-15 00:16:18 +00:00
Anna Zaks
0f390c9c54 Add dynamic checking for sign errors(overflows) during signed <-> unsigned conversions for integers of the same type.
Add unsafe alternatives to allow unsafe conversions:
 - asUnsigned()
 - asSigned()

Swift SVN r10476
2013-11-15 00:16:18 +00:00
Joe Groff
a1f123350f Enable NS_OPTIONS import by default.
Some work needs to be done on static member lookup and bitwise operations, but what's implemented now isn't a regression from what we have (except for an unfortunate case in Foundation.swift where we need to fully qualify a constant in a single-element NS_OPTIONS).

Swift SVN r10471
2013-11-14 23:21:28 +00:00
Adrian Prantl
2edcd17029 [Mangler] Fix a bug in the new Qq mangling that would insert the
innermost DeclContext of the decl that uses the archetype instead of the
actual generic context of the archetype.

<rdar://problem/15453889> Qualified archetypes mangle wrong DeclCtx

Swift SVN r10470
2013-11-14 22:38:32 +00:00
Joe Groff
19457c12ea Give Builtin.Word an abstract size.
Instead of hardcoding Builtin.Word to be an alias for Builtin.Int64, make it its own type of abstract pointer width.

- Change BuiltinIntegerType's width representation to accommodate abstract widths.

- In the AST and in SIL, store values of the types as the greatest supported size for the abstract width (64 bits for a pointer).

- Add some type safety to the ([sz]ext|trunc)(OrBitCast)? builtins that they're used appropriately given the upper and lower bounds of the abstract sizes they're working with.

- Now that Builtin.Word is a distinct type, give it its own mangling.

- In IRGen, lower pointer-sized BuiltinIntegerType appropriately for the target, and truncate lowered SIL values if necessary.

Fixes <rdar://problem/15367913>.

Swift SVN r10467
2013-11-14 19:56:26 +00:00
Dmitri Hrybenko
d5047c96f5 Reject duplicate definitions of enum elements during the first pass of type checking
Swift SVN r10450
2013-11-14 02:54:03 +00:00
Chris Lattner
4968cc208b A couple of related changes:
- Enhance SILBuilder::emitStrongRelease to be smarter.
- Start using emitStrongRelease in type lowering, SILGen,
  CapturePromotion (replacing its implementation of the
  same logic), and MandatoryInlining (one more place)
- Rename the primitive createStrongRetain/ReleaseInst
  instructions to lose their suffix.
- Now that createStrongRetain/ReleaseInst are not special
  cases from the naming perspective, remove some special cases
  from DeserializeSIL and ParseSIL.
  


Swift SVN r10449
2013-11-14 02:21:27 +00:00
Chris Lattner
9570e1fb0c Remove the "createStrongRetain" and "createStrongRelease" SILBuilder methods.
They are the same as createStrongRetainInst and createStrongReleaseInst, but
peephole away FunctionRefInst.  It turns out that there is only a couple
places in SILGen where this behavior is necessary, and this tramples on the
general pattern used in SILBuilder.


Swift SVN r10448
2013-11-14 02:00:41 +00:00
Chris Lattner
b2ac1db9f6 introduce a new helper to SILBuilder that emits a StrongRelease operation,
scanning up the local block to see if it immediately cancels a retain 
operation.

Use this in mandatory inlining to zap more retains and release.  Before
this patch, the result LogicValue allocation blocked this optimization,
preventing the partial_apply from being deleted from the case in 
rdar://15328833.




Swift SVN r10447
2013-11-14 01:50:28 +00:00
Anna Zaks
34f5e43b09 [CCP] Diagnose truncation errors in int to int conversions.
Here we add compile time checks similar to the ones performed at runtime.

Swift SVN r10446
2013-11-14 01:35:22 +00:00
Joe Groff
fdd858dd21 ClangImporter: Import NS_OPTIONS constants as static properties.
Apply the same prefix-chopping logic as for NS_ENUM to produce static property names to put inside the Swift type we create. For now, continue importing NS_OPTIONS as structs with a single integer field; in the short term it's easy to put a C-like interface over them this way.

Swift SVN r10434
2013-11-13 23:19:32 +00:00
Anna Zaks
b687c3ce9c Add runtime integer truncation checking to the conversion constructors
Add new builtins(by generalizing, renaming, and extending the builtins used for compile time integer literal checking). These new builtins truncate integers and check for overflow/truncation errors at runtime. Use these for FixedPoint conversion constructors.

Fix a routine in stdlib's String implementation and a test that relied on bitwise behavior of the constructors (and triggered overflows).

TODO:
- Teach CCP about these to get static checking.
- Add special builtins for same size signed <-> unsigned conversions.

Swift SVN r10432
2013-11-13 21:54:34 +00:00
Stephen Lin
d9340ccf86 MandatoryInlinning: Clean up arguments that end up being unused after inlining, such at metatype parameters to some standard library functions. Resolves <rdar://problem/15218643>.
Swift SVN r10431
2013-11-13 21:06:14 +00:00
Dmitri Hrybenko
c1ce33afec @objc diagnostics: reject @objc methods with tuple-style declarations
Swift SVN r10429
2013-11-13 20:17:43 +00:00
Chris Lattner
425819ac07 Change the SIL string_literal instruction to produce three results
(the same way alloc_box returns two) instead of returning a tuple.

This eliminates a ton of tuple_extract instructions, which just
bloat the generated SIL.  This resolves rdar://15378135.



Swift SVN r10416
2013-11-13 06:43:09 +00:00
Chris Lattner
a4237e2c7d whitespace changes.
Swift SVN r10413
2013-11-13 05:46:28 +00:00
Joe Groff
4c333d8071 AST: Accessors of static properties must be static functions.
Build the getter and setter of a static property as static func decls, and add a verifier check that the static-ness of a var and its accessors match up.

Swift SVN r10395
2013-11-13 00:28:52 +00:00
Stephen Lin
8c1e44a7a7 Revert "Add helper function that will be necessary for recursively removing a group of instructions without dangling pointer issues."
This reverts commit 3d6ec9885426b668450578303e9fc55c4a399ffc. The new function signature is not needed after all, as far as I can currently tell.

Swift SVN r10393
2013-11-13 00:18:41 +00:00
Dmitri Hrybenko
0f8d6fed28 @objc diagnostics: also mention that subscript declarations can be @objc
Swift SVN r10387
2013-11-12 23:50:32 +00:00
Dmitri Hrybenko
ffab09afbf @objc diagnostics: update diagnostic message to provide more information
Swift SVN r10385
2013-11-12 23:34:20 +00:00
Joe Groff
b06afcbf55 Ensure 'isStatic' bit of PatternBindingDecls is always initialized.
And that it gets serialized.

Swift SVN r10382
2013-11-12 23:12:16 +00:00
Enrico Granata
5c8c45624b Removing a few unused Demangler node kinds
Swift SVN r10379
2013-11-12 22:24:20 +00:00
Joe Groff
b64d601bba Sema: Don't try to initialize static properties in implicit constructors.
The implicit default constructor shouldn't try to initialize static properties, and the implicit memberwise constructor shouldn't have arguments for static properties.

Swift SVN r10378
2013-11-12 22:10:15 +00:00
Stephen Lin
60cf42b38a Add helper function that will be necessary for recursively removing a group of instructions without dangling pointer issues.
Swift SVN r10376
2013-11-12 19:07:57 +00:00
Joe Groff
f26a5fa4b3 AST: Static vars aren't stored properties of instances.
Don't include static vars in the 'getStoredProperties' range.

Swift SVN r10373
2013-11-12 17:29:17 +00:00
Joe Groff
4f2adbe7ed AST: Include 'static' bit in VarDecls.
And track the 'static' SourceLoc in the PatternBindingDecl. This lets isInstanceMember return the right thing for static vars.

Swift SVN r10369
2013-11-12 06:16:48 +00:00
Dmitri Hrybenko
bd0f7783cb @objc diagnostics: add a special case diagnostic for generic type parameter
Swift SVN r10353
2013-11-12 00:54:19 +00:00
Dmitri Hrybenko
ba8ff3e67a @objc diagnostics: start producing diagnostics about functions that can not be marked @objc
Swift SVN r10351
2013-11-12 00:18:15 +00:00
Joe Groff
8b11158753 Parser: Allow static vars in DisallowStoredVar contexts.
The contexts for which we set the DisallowStoredVar bit, currently enums and extensions, can both (theoretically) support static variables, so change PD_DisallowStoredVar to PD_DisallowStoredInstanceVar, and allow static vars to be declared in these contexts.

Swift SVN r10350
2013-11-12 00:13:21 +00:00
Joe Groff
ea698da596 Parser: Admit 'static' properties in nongeneric struct or enum decls.
These properties are truly static and can be implemented just as global variables, and this is all we need in the short term to give a good interface to NS_OPTIONS-like Cocoa enumerations.

Swift SVN r10349
2013-11-11 23:57:27 +00:00
Adrian Prantl
da0cb5a10a [Mangler] Introduce a 'Qq' mangling format for archetypes that will be
used only for debug info and within the _Tt namespace.
The DWARF output created by swift is intentionally flat, therefore
archetypes need to be emitted with their DeclContext. While increasing the
length of the mangled names in some cases (substitutions help a lot) it
has the advantage of making names completely self-contained.
There is a lengthy thread on swift-debugger discussing this change.

Swift SVN r10348
2013-11-11 23:44:31 +00:00
Joe Groff
7de9706403 IRGen/Runtime: Expose extra inhabitants of class protocol types.
This gives 'id?' and other optional class protocol types optimal representation consistent with class types.

Swift SVN r10346
2013-11-11 22:52:23 +00:00
Dmitri Hrybenko
de2064a83f @objc diagnostics: highlight source range of the variable type
Introduced VarDecl::getTypeSourceRangeForDiagnostics(), which is not precise
right now; it just highlights the type source range of the typed pattern.
Filed rdar://15441111 to improve it in future.


Swift SVN r10344
2013-11-11 22:07:56 +00:00
Anna Zaks
d1700b9f78 Use standard wording in the warning.
Swift SVN r10342
2013-11-11 21:20:05 +00:00
John McCall
4d51545508 Abstract out a function to print a SILLocation during
PrettyStackTrace and fix it to handle AST-less SILLocations.

Swift SVN r10340
2013-11-11 19:52:33 +00:00
John McCall
0f97e9307c Extract out a function to print a SourceLoc for pretty stack traces.
Swift SVN r10339
2013-11-11 19:52:32 +00:00
Dmitri Hrybenko
b16378f5ed @objc diagnostics: specialize diagnostic text for structs and enums
Swift SVN r10336
2013-11-11 19:13:03 +00:00
Dmitri Hrybenko
c2a4b0a412 Remove unused diagnostics
Swift SVN r10334
2013-11-11 18:54:55 +00:00