mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Merge remote-tracking branch 'origin/main' into rebranch
This commit is contained in:
@@ -1406,6 +1406,11 @@ def emit_extension_block_symbols: Flag<["-"], "emit-extension-block-symbols">,
|
|||||||
NoInteractiveOption, SupplementaryOutput, HelpHidden]>,
|
NoInteractiveOption, SupplementaryOutput, HelpHidden]>,
|
||||||
HelpText<"Emit 'swift.extension' symbols for extensions to external types instead of directly associating members and conformances with the extended nominal when generating symbol graphs">;
|
HelpText<"Emit 'swift.extension' symbols for extensions to external types instead of directly associating members and conformances with the extended nominal when generating symbol graphs">;
|
||||||
|
|
||||||
|
def omit_extension_block_symbols: Flag<["-"], "omit-extension-block-symbols">,
|
||||||
|
Flags<[SwiftSymbolGraphExtractOption, FrontendOption,
|
||||||
|
NoInteractiveOption, SupplementaryOutput, HelpHidden]>,
|
||||||
|
HelpText<"Directly associate members and conformances with the extended nominal when generating symbol graphs instead of emitting 'swift.extension' symbols for extensions to external types">;
|
||||||
|
|
||||||
// swift-symbolgraph-extract-only options
|
// swift-symbolgraph-extract-only options
|
||||||
def output_dir : Separate<["-"], "output-dir">,
|
def output_dir : Separate<["-"], "output-dir">,
|
||||||
Flags<[NoDriverOption, SwiftSymbolGraphExtractOption, SwiftAPIDigesterOption,
|
Flags<[NoDriverOption, SwiftSymbolGraphExtractOption, SwiftAPIDigesterOption,
|
||||||
|
|||||||
@@ -980,6 +980,7 @@ Remangler::mangleDependentGenericConformanceRequirement(Node *node,
|
|||||||
unsigned depth) {
|
unsigned depth) {
|
||||||
DEMANGLER_ASSERT(node->getNumChildren() == 2, node);
|
DEMANGLER_ASSERT(node->getNumChildren() == 2, node);
|
||||||
Node *ProtoOrClass = node->getChild(1);
|
Node *ProtoOrClass = node->getChild(1);
|
||||||
|
DEMANGLER_ASSERT(ProtoOrClass->hasChildren(), ProtoOrClass);
|
||||||
if (ProtoOrClass->getFirstChild()->getKind() == Node::Kind::Protocol) {
|
if (ProtoOrClass->getFirstChild()->getKind() == Node::Kind::Protocol) {
|
||||||
RETURN_IF_ERROR(manglePureProtocol(ProtoOrClass, depth + 1));
|
RETURN_IF_ERROR(manglePureProtocol(ProtoOrClass, depth + 1));
|
||||||
auto Mangling = mangleConstrainedType(node->getChild(0), depth + 1);
|
auto Mangling = mangleConstrainedType(node->getChild(0), depth + 1);
|
||||||
|
|||||||
@@ -619,7 +619,8 @@ ToolChain::constructInvocation(const CompileJobAction &job,
|
|||||||
context.Args.AddLastArg(Arguments, options::OPT_emit_symbol_graph_dir);
|
context.Args.AddLastArg(Arguments, options::OPT_emit_symbol_graph_dir);
|
||||||
}
|
}
|
||||||
context.Args.AddLastArg(Arguments, options::OPT_include_spi_symbols);
|
context.Args.AddLastArg(Arguments, options::OPT_include_spi_symbols);
|
||||||
context.Args.AddLastArg(Arguments, options::OPT_emit_extension_block_symbols);
|
context.Args.AddLastArg(Arguments, options::OPT_emit_extension_block_symbols,
|
||||||
|
options::OPT_omit_extension_block_symbols);
|
||||||
context.Args.AddLastArg(Arguments, options::OPT_symbol_graph_minimum_access_level);
|
context.Args.AddLastArg(Arguments, options::OPT_symbol_graph_minimum_access_level);
|
||||||
|
|
||||||
return II;
|
return II;
|
||||||
@@ -1116,7 +1117,8 @@ ToolChain::constructInvocation(const MergeModuleJobAction &job,
|
|||||||
context.Args.AddLastArg(Arguments, options::OPT_emit_symbol_graph);
|
context.Args.AddLastArg(Arguments, options::OPT_emit_symbol_graph);
|
||||||
context.Args.AddLastArg(Arguments, options::OPT_emit_symbol_graph_dir);
|
context.Args.AddLastArg(Arguments, options::OPT_emit_symbol_graph_dir);
|
||||||
context.Args.AddLastArg(Arguments, options::OPT_include_spi_symbols);
|
context.Args.AddLastArg(Arguments, options::OPT_include_spi_symbols);
|
||||||
context.Args.AddLastArg(Arguments, options::OPT_emit_extension_block_symbols);
|
context.Args.AddLastArg(Arguments, options::OPT_emit_extension_block_symbols,
|
||||||
|
options::OPT_omit_extension_block_symbols);
|
||||||
context.Args.AddLastArg(Arguments, options::OPT_symbol_graph_minimum_access_level);
|
context.Args.AddLastArg(Arguments, options::OPT_symbol_graph_minimum_access_level);
|
||||||
|
|
||||||
context.Args.AddLastArg(Arguments, options::OPT_import_objc_header);
|
context.Args.AddLastArg(Arguments, options::OPT_import_objc_header);
|
||||||
|
|||||||
@@ -172,7 +172,8 @@ int swift_symbolgraph_extract_main(ArrayRef<const char *> Args,
|
|||||||
ParsedArgs.hasArg(OPT_skip_inherited_docs),
|
ParsedArgs.hasArg(OPT_skip_inherited_docs),
|
||||||
ParsedArgs.hasArg(OPT_include_spi_symbols),
|
ParsedArgs.hasArg(OPT_include_spi_symbols),
|
||||||
/*IncludeClangDocs=*/false,
|
/*IncludeClangDocs=*/false,
|
||||||
ParsedArgs.hasArg(OPT_emit_extension_block_symbols),
|
ParsedArgs.hasFlag(OPT_emit_extension_block_symbols,
|
||||||
|
OPT_omit_extension_block_symbols, /*default=*/false),
|
||||||
};
|
};
|
||||||
|
|
||||||
if (auto *A = ParsedArgs.getLastArg(OPT_minimum_access_level)) {
|
if (auto *A = ParsedArgs.getLastArg(OPT_minimum_access_level)) {
|
||||||
|
|||||||
@@ -1323,7 +1323,8 @@ static void ParseSymbolGraphArgs(symbolgraphgen::SymbolGraphOptions &Opts,
|
|||||||
Opts.SkipInheritedDocs = Args.hasArg(OPT_skip_inherited_docs);
|
Opts.SkipInheritedDocs = Args.hasArg(OPT_skip_inherited_docs);
|
||||||
Opts.IncludeSPISymbols = Args.hasArg(OPT_include_spi_symbols);
|
Opts.IncludeSPISymbols = Args.hasArg(OPT_include_spi_symbols);
|
||||||
Opts.EmitExtensionBlockSymbols =
|
Opts.EmitExtensionBlockSymbols =
|
||||||
Args.hasArg(OPT_emit_extension_block_symbols);
|
Args.hasFlag(OPT_emit_extension_block_symbols,
|
||||||
|
OPT_omit_extension_block_symbols, /*default=*/false);
|
||||||
|
|
||||||
if (auto *A = Args.getLastArg(OPT_symbol_graph_minimum_access_level)) {
|
if (auto *A = Args.getLastArg(OPT_symbol_graph_minimum_access_level)) {
|
||||||
Opts.MinimumAccessLevel =
|
Opts.MinimumAccessLevel =
|
||||||
|
|||||||
@@ -26,6 +26,9 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "emit-const-value-sidecar"
|
"name": "emit-const-value-sidecar"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "emit-extension-block-symbols"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -212,11 +212,17 @@ extension Set: ExpressibleByArrayLiteral {
|
|||||||
///
|
///
|
||||||
/// - Parameter elements: A variadic list of elements of the new set.
|
/// - Parameter elements: A variadic list of elements of the new set.
|
||||||
@inlinable
|
@inlinable
|
||||||
|
@inline(__always)
|
||||||
public init(arrayLiteral elements: Element...) {
|
public init(arrayLiteral elements: Element...) {
|
||||||
if elements.isEmpty {
|
if elements.isEmpty {
|
||||||
self.init()
|
self.init()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
self.init(_nonEmptyArrayLiteral: elements)
|
||||||
|
}
|
||||||
|
|
||||||
|
@_alwaysEmitIntoClient
|
||||||
|
internal init(_nonEmptyArrayLiteral elements: [Element]) {
|
||||||
let native = _NativeSet<Element>(capacity: elements.count)
|
let native = _NativeSet<Element>(capacity: elements.count)
|
||||||
for element in elements {
|
for element in elements {
|
||||||
let (bucket, found) = native.find(element)
|
let (bucket, found) = native.find(element)
|
||||||
|
|||||||
32
test/SILOptimizer/set.swift
Normal file
32
test/SILOptimizer/set.swift
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
// RUN: %target-swift-frontend -parse-as-library -primary-file %s -O -sil-verify-all -module-name=test -emit-sil | %FileCheck %s
|
||||||
|
// RUN: %target-swift-frontend -parse-as-library -primary-file %s -Osize -sil-verify-all -module-name=test -emit-sil | %FileCheck %s
|
||||||
|
// REQUIRES: swift_stdlib_no_asserts,optimized_stdlib
|
||||||
|
// REQUIRES: swift_in_compiler
|
||||||
|
|
||||||
|
// Test optimal code generation for creating empty sets.
|
||||||
|
|
||||||
|
// CHECK-LABEL: sil @$s4test30createEmptySetFromArrayLiteralShySiGyF
|
||||||
|
// CHECK: global_addr @_swiftEmptySetSingleton
|
||||||
|
// CHECK-NOT: apply
|
||||||
|
// CHECK: } // end sil function '$s4test30createEmptySetFromArrayLiteralShySiGyF'
|
||||||
|
public func createEmptySetFromArrayLiteral() -> Set<Int> {
|
||||||
|
return []
|
||||||
|
}
|
||||||
|
|
||||||
|
// CHECK-LABEL: sil @$s4test29createEmptySetWithInitializerShySiGyF
|
||||||
|
// CHECK: global_addr @_swiftEmptySetSingleton
|
||||||
|
// CHECK-NOT: apply
|
||||||
|
// CHECK: } // end sil function '$s4test29createEmptySetWithInitializerShySiGyF'
|
||||||
|
public func createEmptySetWithInitializer() -> Set<Int> {
|
||||||
|
return Set<Int>()
|
||||||
|
}
|
||||||
|
|
||||||
|
// CHECK-LABEL: sil @$s4test17createNonEmptySetShySiGyF
|
||||||
|
// CHECK: global_value
|
||||||
|
// CHECK: [[F:%[0-9]+]] = function_ref @$sSh21_nonEmptyArrayLiteralShyxGSayxG_tcfCSi_Tg5
|
||||||
|
// CHECK: apply [[F]]
|
||||||
|
// CHECK: } // end sil function '$s4test17createNonEmptySetShySiGyF'
|
||||||
|
public func createNonEmptySet() -> Set<Int> {
|
||||||
|
return [1, 2, 3]
|
||||||
|
}
|
||||||
|
|
||||||
@@ -2,11 +2,11 @@
|
|||||||
|
|
||||||
// RUN: %empty-directory(%t)
|
// RUN: %empty-directory(%t)
|
||||||
// RUN: %target-build-swift %s -module-name BasicExtension -emit-module -emit-module-path %t/
|
// RUN: %target-build-swift %s -module-name BasicExtension -emit-module -emit-module-path %t/
|
||||||
// RUN: %target-swift-symbolgraph-extract -module-name BasicExtension -I %t -pretty-print -output-dir %t
|
// RUN: %target-swift-symbolgraph-extract -module-name BasicExtension -I %t -pretty-print -output-dir %t -omit-extension-block-symbols
|
||||||
// RUN: %FileCheck %s --input-file %t/BasicExtension@Swift.symbols.json --check-prefixes ALL,EXTRACT,EBSOff,EBSOff_EXTRACT
|
// RUN: %FileCheck %s --input-file %t/BasicExtension@Swift.symbols.json --check-prefixes ALL,EXTRACT,EBSOff,EBSOff_EXTRACT
|
||||||
|
|
||||||
// RUN: %empty-directory(%t)
|
// RUN: %empty-directory(%t)
|
||||||
// RUN: %target-build-swift %s -module-name BasicExtension -emit-module -emit-module-path %t/ -emit-symbol-graph -emit-symbol-graph-dir %t
|
// RUN: %target-build-swift %s -module-name BasicExtension -emit-module -emit-module-path %t/ -emit-symbol-graph -emit-symbol-graph-dir %t -omit-extension-block-symbols
|
||||||
// RUN: %FileCheck %s --input-file %t/BasicExtension@Swift.symbols.json --check-prefixes ALL,BUILD,EBSOff,EBSOff_BUILD
|
// RUN: %FileCheck %s --input-file %t/BasicExtension@Swift.symbols.json --check-prefixes ALL,BUILD,EBSOff,EBSOff_BUILD
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user