Commit Graph

20516 Commits

Author SHA1 Message Date
Slava Pestov
2c7649fcac Merge pull request #22502 from slavapestov/remote-ast-fixes
RemoteAST fixes
2019-02-12 17:34:45 -05:00
Slava Pestov
905a6def79 RemoteAST: Clean up use of std::pair and std::tuple for opened existentials with named structs 2019-02-12 15:18:03 -05:00
Slava Pestov
56a74c4cd3 RemoteAST: Add new entry point to unwrap an Error existential container
The getDynamicTypeAndAddressForExistential() function takes the
address of an existential value; so when looking at an Error,
this is the address of the reference, not the address of the
instance.

lldb needs to look at Error instances too, so add a new entry
point named getDynamicTypeAndAddressForError() which avoids the
extra dereference.

This will be tested on the lldb side.
2019-02-12 14:59:57 -05:00
Slava Pestov
76ebaee078 MetadataReader: Add support for NSError toll-free bridging
An Error existential value can directly store a
reference to an NSError instance without wrapping
it in an Error container.

When "projecting" such an existential, the dynamic type
is the NSError's isa pointer, and the payload is the
address of the instance itself.
2019-02-12 14:59:57 -05:00
Slava Pestov
5824b0f475 MetadataReader: Factor out readNominalTypeFromClassMetadata() to clean up the code flow 2019-02-12 14:59:57 -05:00
Robert Widmann
944d8d06d7 [SE-0155] Default Arguments in Enum Cases
The bulk of the changes are to SILGenApply.  As we must now evaluate the
payload ArgumentSource to an RValue, we follow the example of subscripts
and lie to the argument emitter.  This evaluates arguments at +1 which
can lead to slightly worse codegen at -Onone.
2019-02-12 10:06:48 -05:00
Slava Pestov
3d3dafb9ea Merge pull request #22534 from slavapestov/remoteast-fixes-part-1
Small RemoteAST fixes
2019-02-11 22:00:33 -05:00
Rintaro Ishizaki
552dcd81aa Merge pull request #22429 from rintaro/sourcekit-conformingmethods
[IDE/SourceKit] New SourceKit request for filtered method list
2019-02-11 18:13:15 -08:00
Slava Pestov
94a6ca3094 MetadataReader: Fix reading obfuscated tagged pointers
Turns out the tags are shuffled around by XORing with a
per-process hash, and we have to deobfuscate the tag
before checking if its an extended tag.

There's no test for this; just running the existing tests
several times in a row is sufficient to trigger the problem.
2019-02-11 19:12:02 -05:00
Slava Pestov
28f305bf75 MetadataReader: Fix caching of Objective C class metadata
If resolving the type of an instance produces a class metadata for
which we cannot build a type (for example, a special class like
__NSCFNumber, which the ClangImporter does not produce a ClassDecl
for), we try the superclass.

The caching logic was broken in this case, so subsequent calls
would return an empty type.
2019-02-11 19:12:02 -05:00
Slava Pestov
c8effd26b3 Merge pull request #22408 from slavapestov/always-use-legacy-layouts
Always use legacy layouts
2019-02-11 19:10:02 -05:00
Michael Gottesman
a310f23b8a [ownership] Add support for load_borrow in predictable mem opt.
This reduces the diff in between -Onone output when stripping before/after
serialization.

We support load_borrow by translating it to the load [copy] case. Specifically,
for +1, we normally perform the following transform.

  store %1 to [init] %0
  ...
  %2 = load [copy] %0
  ...
  use(%2)
  ...
  destroy_value %2

=>

  %1a = copy_value %1
  store %1 to [init] %0
  ...
  use(%1a)
  ...
  destroy_value %1a

We analogously can optimize load_borrow by replacing the load with a
begin_borrow:

  store %1 to [init] %0
  ...
  %2 = load_borrow %0
  ...
  use(%2)
  ...
  end_borrow %2

=>

  %1a = copy_value %1
  store %1 to [init] %0
  ...
  %2 = begin_borrow %1a
  ...
  use(%2)
  ...
  end_borrow %2
  destroy_value %1a

The store from outside a loop being used by a load_borrow inside a loop is a
similar transformation as the +0 version except that we use a begin_borrow
inside the loop instead of a copy_value (making it even more efficient).
2019-02-11 00:54:28 -08:00
Slava Pestov
dc3abd14c3 MetadataReader: Add support for Objective-C tagged pointers (#22498)
This allows Remote Mirrors and RemoteAST to inspect existentials
containing instances of imported classes.
2019-02-10 12:23:37 -05:00
Bob Wilson
06120c9d9d More fixes in recent Swift changes to work with newer VFS code. 2019-02-08 16:01:41 -08:00
John McCall
b45ca0439b Use the new ObjC retain/release intrinsics in IRGen. 2019-02-08 14:22:57 -08:00
Rintaro Ishizaki
7837130ae1 [IDE] Give default implementation for completion callbacks 2019-02-08 14:09:00 -08:00
Rintaro Ishizaki
1d845d6e3f [IDE/SourceKit] New SourceKit request for filtered method list
`source.request.conformingmethods` is a new SourceKit request which
receives a source position and a list of protocol namses, returns a list
of methods whose return type conforms to the requested protocols.

rdar://problem/44699573
2019-02-08 12:56:58 -08:00
Slava Pestov
b64db715a8 IRGen: Remove -enable-class-resilience staging flag 2019-02-08 14:22:00 -05:00
Slava Pestov
5680bfde55 IRGen: Always use YAML files for completely fragile class layout
The layouts of resilient value types shipped in the Swift 5 standard library
x and overlays will forever be frozen in time for backward deployment to old
Objective-C runtimes. This PR ensures that even if the layouts of these types
evolve in the future, binaries built to run on the old runtime will continue
to lay out class instances in a manner compatible with Swift 5.

Fixes <rdar://problem/45646886>.
2019-02-08 14:22:00 -05:00
Slava Pestov
bb4cae06d0 IRGen: Rename -read-type-info-path flag to -read-legacy-type-info-path 2019-02-08 14:22:00 -05:00
Ding Ye
0f493a68b3 [Sema] Improve diagnostics for access level of protocol witness in extension. (#22235)
If the access level of a protocol witness does not satisfies a requirement,
the compiler suggests marking it as the required level.  This is not suitable
when the witness is in an extension whose specified access level is less than
the required level, since the fixit fights with other warnings in this case.
This patch identifies such case and produces improved diagnostics.

Resolves: SR-9793
2019-02-08 09:31:01 -08:00
Suyash Srijan
60da82b70d [GSB] [Diag] Constraint to concrete type using ":" should offer a fix-it (#22152)
* [diag] add a diagnostic note for the fixit

* [gsb] emit a diagnostic with fixit to replace ':' with '=='

* [gsb] rename variable

* [gsb] replace dyn_cast with isa

* [test] add a test case

* [test] update tests

* [gsb] emit diagnostic for protocols as well

* [gsb] simplify if statement

* [gsb] rename a variable

* [gsb] Create a helper to remove Self. prefix and add a new test case

* [gsb] simplify checks

* [gsb] move the diagnostic code to finalize()

* [gsb] re-indent

* [gsb] fix a typo

* [gsb] pass values as copy

* [gsb] show a fixit if the subject type is a member type

* [test] update diagnostics in existing tests

* [gsb] check if the subject type has an assoc type decl

* [gsb] use requirement source

* [test] add new tests

* [gsb] use constraint struct and rename to invalidIsaConstraints
2019-02-08 11:02:32 -05:00
Xi Ge
536e706f71 Merge pull request #22465 from nkcsgexi/interpolation-extract
AST: TapExpr should return sub-expression's source locations if set.
2019-02-08 07:56:43 -08:00
Slava Pestov
b2f0327516 IDE: Remove getTypeFromMangledSymbolname()
There was only one remaining usage other than in testing tools.

Note that when a declaration mangling was passed in, the old entry
point would (try to) return the type of the declaration.

The new entry point no longer has this behavior. I changed the
bridging-header-first test to run lldb-moduleimport-test with
-decl-from-mangled instead of -type-from-mangled-old to preserve
the behavior of the test.

Also, I removed test/DebugInfo/DumpTypeFromMangledName.swift
completely. This test only covered a handful of cases, and a bunch
of them were declaration manglings rather than type manglings.
The new tests in test/TypeDecoder/ are much more comprehensive.
2019-02-08 02:56:05 -05:00
Slava Pestov
71ff168ad5 Sema: Add a couple more counters 2019-02-07 23:46:31 -05:00
Saleem Abdulrasool
adcdc39791 swift: update for LLVM SVN r344140
Update swift's usage of clang::vfs which has been hoisted into LLVM.
2019-02-07 17:53:42 -08:00
Xi Ge
5617e4a793 AST: TapExpr should return sub-expression's source locations if set.
Without source location, TapExpr could stop IDE from collecting parameters
while perform refactoring.

rdar://47835267
2019-02-07 16:46:34 -08:00
John McCall
f143db7942 Merge pull request #22409 from rjmccall/init-class-metadata-dependencies-compiler
Fix a race condition with the initialization of class metadata
2019-02-07 12:59:39 -05:00
Saleem Abdulrasool
6f121148d2 Merge pull request #22376 from compnerd/null-is-not-0
ABI: use `nullptr` instead of `0` for NULL comparision
2019-02-07 08:34:48 -08:00
Xi Ge
917c3d8135 Merge pull request #22423 from nkcsgexi/node-hash
SyntaxParser: set up a C API to get a hash value indicating the node declaration set
2019-02-06 19:57:54 -08:00
Xi Ge
e07a8cf2a6 SyntaxParser: set up a C API to get a hash value indicating the node declaration set
To ensure SwiftSyntax calls a compatible parser library, this patch sets
up a C API that returns a constant string calculated during compilation time to indicate
the version of syntax node declarations. The same hash will be calculated
in the SwiftSyntax (client) side as well by using the same algorithm.

During runtime, SwiftSyntax will verify its hash value is identical to the
result of calling swiftparse_node_declaration_hash before actual
parsing happens.

This patch only sets the API up. The actual implementation of the
hashing algorithm will come later.
2019-02-06 17:33:48 -08:00
Harlan Haskins
9f5bf22ee3 Merge pull request #22435 from harlanhaskins/oops
[ParseableInterface] Remove some accidentally-committed code
2019-02-06 17:29:32 -08:00
Pavel Yaskevich
6754b86507 Merge pull request #22379 from xedin/rdar-47787705
[ConstraintSystem] Detect invalid initializer references early
2019-02-06 17:16:20 -08:00
Harlan Haskins
17821b6fd7 [ParseableInterface] Remove some accidentally-committed code 2019-02-06 16:24:33 -08:00
Xi Ge
a92ea0c256 IDE: print underscored keywords for interface generation
Addressing @airspeedswift's code review feedback.
2019-02-06 14:51:39 -08:00
Xi Ge
c0598b9888 ASTPrinter: add an option to skip keywords with a prefix of underscore.
DocSupport will use set this flag to avoid printing __consuming, __owned, and
__shared.

rdar://47777848
2019-02-06 14:51:39 -08:00
John McCall
7c88b22e89 Remove some comments that are both unnecessary and invalid. 2019-02-05 23:28:17 -05:00
Pavel Yaskevich
9a1e92ec0a [AST] Add getDecl parameter to Expr::isTypeRerefence
So it could be extended to support not yet fully type-checked
AST when used by constraint system solver.
2019-02-05 18:09:51 -08:00
Slava Pestov
cc8236f7d0 AST: ASTMangler should not depend on ASTDemangler
ASTDemangler depends on ClangImporter, etc.
2019-02-05 21:03:33 -05:00
Harlan Haskins
a4e6631e86 Merge pull request #22394 from harlanhaskins/target-locked
[ParseableInterface] Use arch for cache key instead of full triple
2019-02-05 17:03:02 -08:00
John McCall
2e252e174e Merge pull request #22386 from rjmccall/init-class-metadata-depedencies-runtime
Add new runtime functions for handling dependencies when initializing class metadata
2019-02-05 19:08:01 -05:00
Doug Gregor
9b38073039 Merge pull request #22384 from DougGregor/abi-runtime-stored-pointer
[ABI] Fix metadata accessors for 32-bit remote AST/remote mirrors.
2019-02-05 15:51:14 -08:00
Harlan Haskins
4eafcc9a6f [ParseableInterface] Use arch for cache key instead of full triple
The target triple actually includes too much information -- just use the
target architecture.

rdar://46503065
2019-02-05 15:44:39 -08:00
John McCall
a074bc2ed4 Add new APIs for init/updateClassMetadata that can report dependencies. 2019-02-05 16:44:56 -05:00
Doug Gregor
87db85fdef [ABI] Fix metadata accessors for 32-bit remote AST/remote mirrors.
The use of sizeof(void*) in TargetStructMetadata and
TargetEnumMetadata's accessors is incorrect when (e.g.) reading
metadata from a 32-bit process in a 64-bit host. Use
sizeof(StoredPointer) instead to properly account for the runtime
pointer size.

Fixes rdar://problem/47305557.
2019-02-05 12:59:58 -08:00
Pavel Yaskevich
1d8cee9cb4 [ConstraintSystem] Detect invalid initializer references early
Currently invalid initializer references are detected and
diagnosed in solution application phase, but that's too
late because solver wouldn't have required information while
attempting to determine the best solution, which might result
in viable solutions being ignored in favour of incorrect ones e.g.

```swift
protocol P {
  init(value: Int)
}

class C {
  init(value: Int, _: String = "") {}
}

func make<T: P & C>(type: T.Type) -> T {
  return T.init(value: 0)
}
```

In this example `init` on `C` would be preferred since it
comes from the concrete type, but reference itself is invalid
because it's an attempt to construct class object using
metatype value via non-required initalizer.

Situations like these should be recognized early and invalid
use like in case of `C.init` should be ranked lower or diagnosed
if that is the only possible solution.

Resolves: rdar://problem/47787705
2019-02-05 10:25:36 -08:00
Robert Widmann
f8a7daa374 [NFC] Silence some Wnewline-eof violations 2019-02-05 12:44:05 -05:00
Saleem Abdulrasool
6928ca630e ABI: use nullptr instead of 0 for NULL comparision
Silence a clang warning about use of `0` for NULL pointer comparision.
2019-02-05 09:42:52 -08:00
Slava Pestov
363e47be49 Merge pull request #22260 from slavapestov/round-trip-type-reconstruction
ASTMangler: Verify that debug manglings round-trip
2019-02-05 11:20:41 -05:00
Doug Gregor
de2b75c1c1 Merge pull request #22370 from DougGregor/lazy-known-protocol-kind
[AST] Lazily compute ProtocolDecl::getKnownProtocolKind()
2019-02-05 06:49:42 -08:00