Commit Graph

13 Commits

Author SHA1 Message Date
Dario Rexin
bde7daa2f2 [SILOptimizer] Don't apply CMO to key paths that reference inaccessible properties
rdar://145095088
2025-02-24 23:07:18 -08:00
Erik Eckstein
ff15d54c6c Deserializer: fix a crash with global variables and cross-module-optimization
In case of cross-module-optimizations it can happen that a private global variable is changed to public,
but it's declaration is not available in the module file.
2024-07-02 14:03:02 +02:00
John McCall
82d9e4cb59 Fix a crash when serializing variadic generic tuple code under -wmo
It seems really unfortunate that we use SILCloner to, basically,
implement a recursive visitor of the types used in a SIL function,
but apparently it's what we do.

Fixes #72117.
2024-04-11 17:22:10 -04:00
Ellie Shin
a3250e426d Support Package CMO
* Add a new flag -experimental-package-cmo that requires -experimental-allow-non-resilient-access.
* Support serializing package decls for CMO in package if enabled.
* Only applies to default mode CMO.
* Unlike the existing CMO, package CMO can be built with -enable-library-evolution as package
modules are required to be built together in the same project.
* Create hasPublicOrPackageVisibility to opt in for package decls; needed for CMO, SILVerifier,
and other call sites that verify or determine codegen.

Resolves rdar://121976014
2024-03-12 15:00:24 -07:00
Erik Eckstein
75bc7f621f CrossModuleOptimization: don't serialize functions referencing imported C functions/variables
Imported C functions and variables are not necessarily public in their modules.

rdar://100874714
2022-10-10 18:29:01 +02:00
Erik Eckstein
d93ab2019a CrossModuleOptimization: public global variables must not be serialized if they reference private functions/closures
For example:
```
public static var privateFunctionPointer: (Int) -> (Int) = { $0 }
```

Fixes a verifier crash and/or undefined symbol error

rdar://99493254
2022-09-02 22:17:40 +02:00
Erik Eckstein
a1da35c6cb cross-module-optimization: be more conservative when emitting a TBD file, part 2
This is a follow-up of 1dfb3b1a2a.
We need to be more conservative about types as for functions, because types can also "produce" symbols, like direct field offsets, etc.

rdar://96953318
2022-07-26 14:28:09 +02:00
Arnold Schwaighofer
69471700b0 CrossModuleOptimization: Don't serialize pre-specialized public entry points
We should continue to use the public pre-specialized entry point from another module. But not block other uses of generic specializations.
2022-05-05 08:01:09 -07:00
Erik Eckstein
1dfb3b1a2a cross-module-optimization: be more conservative when emitting a TBD file.
If we are emitting a TBD file, the TBD file only contains public symbols of this module.
But not public symbols of imported modules which are statically linked to the current binary.
This prevents referencing public symbols from other modules which could (potentially) linked statically.
Unfortunately there is no way to find out if another module is linked statically or dynamically, so we have to be conservative.

Fixes an unresolved-symbol linker error.
rdar://89364148
2022-03-03 11:42:07 +01:00
Erik Eckstein
8c52853b9e cross-module-optimization: fix a problem with global variables
don't make public external globals non-external
2022-02-11 15:53:47 +01:00
Erik Eckstein
408cf02bc8 rework cross-module-optimization
* rename the CrossModuleSerializationSetup pass to simply CrossModuleOptimization
* remove the CMO specific serializer pass. Instead run the CrossModuleSerializationSetup pass directly before the standard serializer pass.
* correctly handle shared functions (e.g. specializations)
* refactoring
2021-12-20 11:33:02 +01:00
Erik Eckstein
27e1220a67 CMO: fix handling of static globals with function references
Referenced functions within the initializer of a SILGlobalVariable must be handled like referenced functions in other functions.

Fixes an assert crash when compiling with -cross-module-optimization
2021-10-13 15:22:58 +02:00
Erik Eckstein
c1e1bf2bd6 cross-module-optimization: Don't serialize functions which reference implementationOnly-imported functions
The check for implementationOnly imports was already done for types, but it was missing for functions.
Fixes a crash when implementationOnly-importing a C module.

https://bugs.swift.org/browse/SR-15048
rdar://81701218
2021-08-19 20:27:56 +02:00