Commits

Slava Pestov committed ce1f7b2811f
AST/SILGen: Factor out "function body might be inlined in other resilience domains" logic If a function is public, and either @_transparent or @inline(__always), we need to make its body available for inlining in other resilience domains. The more general concept here is an 'inlineable' function; once the precise behaviors we want are nailed down, the set of AST attributes for exposing this will likely change. At the SIL level, inlineable functions are marked with the [fragile] attribute. The SIL serializer only serializes [fragile] functions unless -sil-serialize-all is passed in. This patch fixes two problems in this area by consolidating some duplicated logic: 1) Property accesses in Sema did not check for @inline(__always) functions, or functions nested inside inlineable functions. This manifested as IRGen crashes if an inlineable function accessed a property of a resilient type. 2) In SILGen, functions nested inside [fragile] functions were properly [fragile], but @inline(__always) was not taken into account. This manifested as SIL serializer crashes where a [fragile] function could reference a non-public, non-[fragile] function. This change is part of the series for building the standard library without -sil-serialize-all.