Commit Graph

362 Commits

Author SHA1 Message Date
Erik Eckstein
613f4bf7ab Demangler: make the old demangler more robust to deal with malformed symbols
rdar://problem/39995593
2018-05-07 10:21:13 -07:00
Michael Gottesman
afc98b34e9 [func-sig-opts] Add a new mangling for the guaranteed->owned transformation.
I followed the example of the owned->guaranteed transformation.

rdar://38196046
2018-04-26 16:36:41 -07:00
Slava Pestov
8d6b60f8f5 Mangling: Use WO namespace for outlined value operations to declutter W namespace 2018-03-26 19:39:25 -07:00
Erik Eckstein
f0ef4007b6 Demangler: support the final mangling prefix _$s
rdar://problem/37681432
2018-03-24 19:28:38 -07:00
Erik Eckstein
da322a26a8 demangler: fix crashes for malformed symbols 2018-03-05 14:40:19 -08:00
Doug Gregor
28c489c16d [ABI] Mangle retroactive conformances as part of bound generic types.
A "retroactive" protocol conformance is a conformance that is provided
by a module that is neither the module that defines the protocol nor
the module that defines the conforming type. It is possible for such
conformances to conflict at runtime, if defined in different modules
that were not both visible to the compiler at the same time.

When mangling a bound generic type, also mangle retroactive protocol
conformances that were needed to satisfy the generic requirements of
the generic type. This prevents name collisions between (e.g.) types
formed using retroactive conformances from different modules. The
impact on the size of the mangling is expected to be relatively small,
because most conformances are not retroactive.

Fixes the ABI part of rdar://problem/14375889.
2018-01-31 09:53:38 -08:00
Erik Eckstein
5acd7edcdf Fix a runtime crash in the old remangler when trying to create a mangling for a private type in the Swift library
rdar://problem/36889992
2018-01-29 16:25:38 -08:00
Jordan Rose
e63879dc48 [Mangling] Define "related entity" operators 'LA'...'LJ'
(and 'La'...'Lj')

Use this for the synthesized structs for error enums, as described in
the previous commit, instead of reusing the "private discriminator"
feature. I left some space in the APIs for "related entity kinds" that
are longer than a single character, but I don't actually expect to use
it any time soon. It's mostly just easier to deal with StringRef than
with a bare char.

Note that this doesn't perfectly round-trip to the old mangling; I had
it treat these nodes as private discriminators with a prefixed "$"
instead. We don't depend on that for anything, though.
2018-01-24 10:52:46 -08:00
Michael Ilseman
75463e30f3 [stdlib] Rename _StringCore to _LegacyStringCore. NFC.
In grand LLVM tradition, the first step to redesigning _StringCore is
to first rename it to _LegacyStringCore. Subsequent commits will
introduce the replacement, and eventually all uses of the old one will
be moved to the new one.

NFC.
2018-01-21 12:28:56 -08:00
Doug Gregor
bc866086d9 [Mangling] Add a mangling for protocol conformance descriptors. 2018-01-17 10:33:30 -08:00
Jordan Rose
97f1aa7e54 [Mangling] Use "SC" for importer-synthesized conformances
...and "So" for the Swift-side representation of an Objective-C-side
conformance. These manglings are never used in public symbols, but
they're stil good to be consistent about.
2018-01-09 17:55:24 -08:00
Jordan Rose
18689fe223 [Mangling] Uniformly use "So" for imported decls.
...and repurpose "SC" for (C)lang-importer-synthesized decls, instead
of just decls that are C-like instead of ObjC-like. (See next commits.)
2018-01-09 17:55:23 -08:00
Pavel Yaskevich
25f59f06f2 [Mangler] Support functions with old parameter label mangling scheme
Make function mangling backward compatible based on the prefix
of the mangled symbol, which is used to distinguish between names
with old/new parameter label mangling schemes.

Resolves: rdar://problem/36357120
2018-01-08 18:04:07 -08:00
Erik Eckstein
e5b1c9d899 demangler: catch more cases where the demangler crashes on malformed symbols 2018-01-08 14:59:08 -08:00
Erik Eckstein
cd3d50a5d9 ABI: Change the mangling prefix from _T0 to $S 2018-01-06 13:55:59 -08:00
Pavel Yaskevich
5a76f50db0 [Mangling/ABI] NFC: Fix Demangler tests to reflect label mangling changes 2017-12-18 15:45:50 -08:00
Erik Eckstein
be8741744a Fix crash in re-mangling when trying to get a standard-substitution for a private stdlib name
rdar://problem/35734537
2017-11-28 17:08:55 -08:00
John McCall
7743be30f6 Add a "token" type to SIL to allow dependencies to be expressed without
allowing abstraction.
2017-11-13 04:03:21 -05:00
adrian-prantl
de643ede1e Merge pull request #12104 from adrian-prantl/27335207
Add mangling testcase
2017-10-20 13:29:51 -07:00
Pavel Yaskevich
b571dd8e8e Merge pull request #12482 from xedin/improve-variadic-mangling
[Mangling] Improve handling of the variadic function parameters
2017-10-17 11:20:28 -07:00
Pavel Yaskevich
8f26fb88d4 [Mangling] Improve handling of the variadic function parameters
Currently when function types like `(_: Int...) -> Void` are mangled
their names are going to include enclosing sugar BoundGenericType(Array),
which is not necessary and doesn’t play well with `AnyFunctionType::Param`
which strips the sugar away.

Resolves: rdar://problem/34941557
2017-10-17 00:16:12 -07:00
Erik Eckstein
e21b9124ee Demangler: fix demangling and remangling of associated type paths.
fixes SR-6138
2017-10-16 17:30:34 -07:00
Adrian Prantl
11363ff660 add mangling testcase 2017-09-25 12:57:09 -07:00
Alex Hoppen
1c7e289b96 [Mangling] Adjust subscript mangling to not include "subscript"
Change the mangling of accessors to have a variable or subscript node
as their only child node, while subscript nodes no longer contain a decl
name.
2017-09-10 19:44:07 +02:00
Arnold Schwaighofer
48bd2bba76 Mangling changes for outlined Objective-C method calls
rdar://33387700
2017-09-06 08:37:30 -07:00
Erik Eckstein
c1e98b9df2 mangling: Add mangling for outlined global variables 2017-08-23 09:15:01 -07:00
Erik Eckstein
ecd177fa17 Demangler: handle suffixes in the form '.<n>'.
Demangle such suffixes as "unmangled suffix"
IRGen still uses '.<n>' to disambiguate partial apply thunks and outlined copy functions.

rdar://problem/32934962
2017-06-26 15:19:20 -07:00
Erik Eckstein
79c522a49d demangler: Support the future final mangling prefix $S
As it’s not clear if we will need underscores, the demangler accepts $S and _$S.
Note that a double underscore is handled by the demangler client.

rdar://problem/32251811
2017-06-26 11:32:26 -07:00
Dmitri Gribenko
486cab447d tests: replace 'rm -rf %t && mkdir -p %t' with '%empty-directory(%t)'
These changes were made using a script.
2017-06-04 11:08:39 -07:00
Jordan Rose
c1c4f5243b [Mangling] Include private discriminators in constructor manglings. (#9880)
Previously, two constructors with the same full name and argument
types would get identical manglings even if they were declared
'private' or 'fileprivate' in different files. This would lead to
symbol collisions in whole-module builds. Add a new mangling node for
private discriminators on base-name-less decls to make this unique.

This still doesn't fix the existing issue with private members, named
or not, conflicting when they're in the /same/ file, but since Swift 4
makes those members visible to one another (SE-0169) that's only an
issue in Swift 3 mode anyway, and as such probably won't get fixed at
all.

rdar://problem/27758199
2017-06-01 16:42:17 -07:00
Erik Eckstein
d342041420 Mangling: use ‘Tm’ mangling for merged functions
Previously merged functions just got the name with a “_merged” suffix
2017-05-24 17:00:16 -07:00
Erik Eckstein
cb4564ecd0 Demangler: replace an assert with a bail-condition.
The assert condition can be false for a malformed symbol, like _T0s30ReversedRandomAccessCollectionVyxGTfq3nnpf_nTfq1cn_nTfq4x_n

rdar://problem/32359287
2017-05-23 15:58:51 -07:00
Erik Eckstein
e8ce388651 Demangler: fix a hang in case a malformed symbol ends with an 'A<digit>'
For example _T0A8

rdar://problem/32359287
2017-05-23 13:53:24 -07:00
Erik Eckstein
ff892f9e19 Demangler: don’t crash if demangling a malformed KeyPath[GS]etterThunkHelper
rdar://problem/32333373
2017-05-22 16:50:26 -07:00
Erik Eckstein
4efdcebf80 Demangler: make the demangler more tolerant with malformed symbols.
Instead of crashing it just should not demangle malformed symbols.

rdar://problem/32113006
2017-05-16 12:28:32 -07:00
Erik Eckstein
52aa8ef94b demangler: classify reabstruction thunks as thunks 2017-05-11 16:02:21 -07:00
Roman Levenstein
e92dab7ef2 Fix a small bug in the remangler. 2017-05-04 15:55:27 -07:00
Jordan Rose
c8d3506e55 Revert "[Mangling] Uniformly use "So" for imported decls." (#9233)
This reverts commit 25985cb764. For now,
we're trying to avoid spurious non-structural changes to the mangling,
so that the /old/ mangling doesn't appear to change. That doesn't mean
no changes at all, but we can save this one for later.
2017-05-03 16:13:29 -07:00
Erik Eckstein
ae49b6939b Mangling: fix mangling of functions with a single empty tuple argument
For example:
	func testit(_ x: ()) -> Int
2017-04-28 16:51:34 -07:00
Jordan Rose
bae60156ce [swift-ide-test] Update -find-mangled to use the real logic. (#9008)
At the time this code was written, the logic to find a Decl from a
demangled name still lived in LLDB. Now that it's been sunk into
libIDE, we can test the actual behavior, though I've changed it to
find declarations rather than types.
2017-04-25 15:09:28 -07:00
Jordan Rose
25985cb764 [Mangling] Uniformly use "So" for imported decls.
...and repurpose "SC" for (C)lang-importer-synthesized decls, instead
of just decls that are C-like instead of ObjC-like. (See next commits.)
2017-04-24 09:57:30 -07:00
Jordan Rose
3b07eda6aa [Mangler] Use '_' to represent nameless entities.
This can show up when trying to generate USRs for a document with
errors in it. This isn't a great answer because the names it generates
aren't unique (there may be more than one nameless entity with the
same type), but it at least generates valid mangled names.

When generating mangled names for purposes other than USRs, nameless
entities are now checked for by an assertion.
2017-04-17 11:31:11 -07:00
swift-ci
7eab946d3f Merge pull request #8759 from eeckstein/pw-as-thunk 2017-04-13 16:14:18 -07:00
Erik Eckstein
8dcdb7a193 Mangler: Classify protocol witnesses as thunks.
Protocol witnesses just call the actual implementation in the conforming type.
2017-04-13 15:41:07 -07:00
Huon Wilson
22c9e20a9d [IRGen] Completely remove witness table offsets.
These are unused.
2017-04-13 11:44:01 -07:00
Erik Eckstein
789646a15b Demangling: Make demangled names more readable and further reduce the size of the simplified demangled names
The goal here is to make the short demangling as short and readable as possible, also at the cost of omitting some information.
The assumption is that whenever the short demangling is displayed, there is a way for the user to also get the full demangled name if needed.

*) omit <where ...> because it does not give useful information anyway

Deserializer.deserialize<A where ...> () throws -> [A]
--> Deserializer.deserialize<A> () throws -> [A]

*) for multiple specialized functions only emit a single “specialized”

specialized specialized Constructible.create(A.Element) -> Constructible<A>
--> specialized Constructible.create(A.Element) -> Constructible<A>

*) Don’t print function argument types:

foo(Int, Double, named: Int)
--> foo(_:_:named:)

This is a trade-off, because it can lead to ambiguity if there are overloads with different types.

*) make contexts of closures, local functions, etc. more readable by using “<a> in <b>” syntax
This is also done for the full and not only for the simplified demangling.

Renderer.(renderInlines([Inline]) -> String).(closure #1)
--> closure #1 in Renderer.renderInlines

*) change spacing, so that it matches our coding style:

foo <A> (x : A)
--> foo<A>(x: A)
2017-04-13 08:43:28 -07:00
Erik Eckstein
487896edca Mangling: relax the re-mangling verification check a little bit.
There are cases where the re-mangling doesn't yield the original mangled name.
This is no problem for the compiler as it only affects how mangling substitutions are handled.

rdar://problem/31539542
2017-04-10 15:37:37 -07:00
Erik Eckstein
3ee9c88166 Demangler: fix de- and re-mangling of constrained extensions
SR-4512
rdar://problem/31471429
2017-04-06 16:07:13 -07:00
Erik Eckstein
cd3da4a218 Demangling: Print varargs correctly.
Instead of [ Swift.Int]..., print  Swift.Int...
2017-03-27 10:52:53 -07:00
Erik Eckstein
e427ded6c9 Mangling: refactoring: clean up tuple nodes
Replace VariadicTuple and NonVariadicTuple with a single Tuple node.
The variadic property is now part of the tuple element and not of the whole tuple.
2017-03-25 19:07:52 -07:00