Commit Graph

11 Commits

Author SHA1 Message Date
Pavel Yaskevich
6519d99736 [Mangling/ABI] NFC: Fix SILGen tests to reflect label mangling changes 2017-12-18 15:44:24 -08:00
Michael Gottesman
f9b608281e [silgen] Update 6 more tests for ownership.
rdar://29791263
2017-10-25 17:31:17 -07:00
Slava Pestov
e912f27944 AST/SILGen: New mangling for vtable thunks
Simply mangling the derived method is no longer sufficient. Now also
mangle the base method, so that eventually we handle this sort of
scenario:

class Base {
  // introduces: Base.method
  func method(_: Int, _: Int) {}
}

class First : Base {
  // overrides: Base.method
  // introduces: First.method
  override func method(_: Int?, _: Int) {}
}

class Second : First {
  // overrides: Base.method, First.method
  // introduces: Second.method
  override func method(_: Int?, _: Int?) {}
}

Here, the override of Base.method by Second.method and the
override of First.method by Second.method require distinct
manglings even though the derived method (Second.method) is
the same in both cases.

Note that while the new mangling is longer, vtable thunks are
always emitted with private linkage, so with the exception of
the standard library which is built with -sil-serialize-all
they will not affect the size of dylibs.

The standard library itself has very few classes so it doesn't
matter there either.

This patch doesn't actually add any support to introduce new
vtable entries for methods that override; this is coming up
next.
2017-03-23 23:40:52 -07:00
Erik Eckstein
c4a11f4c92 tests: remove the now unused option -new-mangling-for-tests 2017-03-22 11:28:43 -07:00
Erik Eckstein
1d3724666f tests: convert about 400 tests to the new mangling by using the -new-mangling-for-tests option
When the new mangling is enabled permanently, the option can be removed from the RUN command lines again.
2017-01-24 15:27:45 -08:00
John McCall
34fb15e375 Abstract the object type of an optional type according to the
abstraction pattern of the type rather than always using the
most-general pattern, and erase ImplicitlyUnwrappedOptional from
the SIL type system.
2016-09-08 23:26:19 -07:00
Dmitri Gribenko
d175b3b66d Migrate FileCheck to %FileCheck in tests 2016-08-10 23:52:02 -07:00
Dmitri Gribenko
65d840c0ae stdlib: lowercase cases in Optional and ImplicitlyUnwrappedOptional 2016-02-18 00:40:33 -08:00
Joe Groff
2368ce774b Remove self types from mangling by default.
And include some supplementary mangling changes:

- Give the first generic param (depth=0, index=0) a single character mangling. Even after removing the self type from method declaration types, 'Self' still shows up very frequently in protocol requirement signatures.
- Fix the mangling of generic parameter counts to elide the count when there's only one parameter at the starting depth of the mangling.

Together these carve another 154KB out of a debug standard library. There's some awkwardness in demangled strings that I'll clean up in subsequent commits; since decl types now only mangle the number of generic params at their own depth, it's context-dependent what depths those represent, which we get wrong now. Currying markers are also wrong, but since free function currying is going away, we can mangle the partial application thunks in different ways.

Swift SVN r32896
2015-10-26 22:05:20 +00:00
Mark Lacey
810631db50 Do emit diagnostics on UnreachableInst that result from mandatory inlining.
If these are actually resulting from something we should diagnose, we
should have already emitted diagnostics on these when emitting
diagnostics on the callee function.

This was reported as a compiler crash resulting from hitting an
llvm_unreachable() in the diagnostics code because we're attempting to
emit a diagnostic about a constructor not having a return value on some
path (and the code does not expect to be emitting these diagnostics from
constructors).

It turns out this was extremely difficult to reproduce because it
required a constructor with a compiler generated apply to a function
with an UnreachableInst in it that does not get replaced by another
diagnostics pass, DiagnoseUnreachable.

To satisfy the last of these conditions, I've added '-assert-config
Release' to the run line, because this results in a call to a no-return
function (one of the fatal error reporting functions) not getting
emitted because it is stripped out due to the assert configuration (and
DiagnoseUnreachable would have stripped the code after the no-return
function, and that code would have included the UnreachableInst that
triggers the crash this is fixing).

Fixes the rest of rdar://problem/20663080.

Swift SVN r28452
2015-05-12 04:11:38 +00:00
Mark Lacey
98d69ab089 Move ObjC portion of test to a separate file to unbreak Linux testing.
Swift SVN r28356
2015-05-09 01:30:26 +00:00