<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Jan 12, 2016, at 5:15 PM, Michael Ilseman via swift-dev &lt;<a href="mailto:swift-dev@swift.org" class="">swift-dev@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;">By keeping it in mind, do you mean to allow for more categories to be added in the future, or does this affect the fundamental design?</div></div></blockquote><div><br class=""></div><div>Not that I have much opinion here but to answer your question, the motivation for suppressing them would be unique, so they would simply go under a new category.</div><div><br class=""></div><div>Likewise, the more arcane warnings could go uncategorized until there’s a need to suppress them as a separate group. Although at first glance it looks like several of those fall under “command line user interface”.</div><div><br class=""></div><div>Andy&nbsp;</div><br class=""><blockquote type="cite" class=""><div class=""><div style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><blockquote type="cite" class=""><div class="">On Jan 12, 2016, at 5:06 PM, Michael Gottesman &lt;<a href="mailto:mgottesman@apple.com" class="">mgottesman@apple.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><br class=""><div class=""><blockquote type="cite" class=""><div class="">On Jan 12, 2016, at 9:44 AM, Michael Ilseman via swift-dev &lt;<a href="mailto:swift-dev@swift.org" class="">swift-dev@swift.org</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div class="">Hello, I'm interested in enabling finer-grained control over warning/error</div><div class="">reporting ala Clang. I've started to put in some infrastructure to</div><div class="">DiagnosticEngine, and now I'm at the point of determining categorization.&nbsp;</div><div class=""><br class=""></div><div class="">I'd like some input (and maybe even some bikeshedding!) on the community's</div><div class="">thoughts and preferences here. Here's my take on the issue:</div><div class=""><br class=""></div><div class="">When it comes to defining the categorization, I can see a few approaches:&nbsp;</div><div class=""><ol class="MailOutline"><li class="">&nbsp;Categorize based on broad language-feature/compiler-area. E.g. "Availability" or “CommandLineArguments”</li><li class="">&nbsp;Categorize based on the kind of warning. E.g. "Deprecated" or &nbsp;“Uninitialized"</li><li class="">&nbsp;Categorize based on severity or specificity of warnings. E.g. "Pedantic" or "UnusedValue" or "NullDereference"</li></ol></div><div class=""><br class=""></div><div class="">And, of course, I think that preference should be given to how people would</div><div class="">actively like to use the categories to control warnings. For example, there's</div><div class="">a handful of warnings that makes less sense in a REPL or rapid experimentation</div><div class="">environment, such as variable_never_mutated.</div><div class=""><br class=""></div><div class="">Here's a straw-man proposal of some categorization. Of course, one developer's</div><div class="">annoying pedantic warning is another's life-saving code-smell detector. I am not</div><div class="">personally tied to these categorizations at all, I'm just interested in there</div><div class="">being something simple and basic. Below is a list of every warning in Swift with</div><div class="">an attempt to put it under a category.</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">Deprecated:</div><div class="">&nbsp; &nbsp; var_not_allowed_in_pattern</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "Use of '%select{var|let}0' binding here is deprecated and will be "</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "removed in a future version of Swift"</div><div class="">&nbsp; &nbsp; deprecated_c_style_for_stmt</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "C-style for statement is deprecated and will be removed in a future "</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "version of Swift"</div><div class="">&nbsp; &nbsp; deprecated_convention_attribute</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "'@%0' attribute is deprecated; '@convention(%1)' should be used "</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "instead"</div><div class="">&nbsp; &nbsp; availability_deprecated</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "%0 %select{is|%select{is|was}3}1 deprecated"</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "%select{| %select{on|in}3 %2%select{| %4}3}1"</div><div class="">&nbsp; &nbsp; availability_deprecated_msg</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "%0 %select{is|%select{is|was}3}1 deprecated"</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "%select{| %select{on|in}3 %2%select{| %4}3}1: %5"</div><div class="">&nbsp; &nbsp; availability_deprecated_rename</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "%0 %select{is|%select{is|was}3}1 deprecated"</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "%select{| %select{on|in}3 %2%select{| %4}3}1: renamed to '%5'"</div><div class="">&nbsp; &nbsp; parameter_curry_syntax_removed</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "curried function declaration syntax will be removed in a future "</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "version of Swift; use a single parameter list"</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">Unsupported:</div><div class="">&nbsp; &nbsp; warning_parallel_execution_not_supported</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "parallel execution not supported; falling back to serial execution"</div><div class="">&nbsp; &nbsp; unsupported_synthesize_init_variadic</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "synthesizing a variadic inherited initializer for subclass %0 is "</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "unsupported"</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">Stylistic/Pedantic/Cleanliness:</div><div class="">&nbsp; &nbsp; pbd_never_used_stmtcond</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "value %0 was defined but never used; consider replacing "</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "with boolean test"</div><div class="">&nbsp; &nbsp; pbd_never_used</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "initialization of %select{variable|immutable value}1 %0 was never used"</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "; consider replacing with assignment to '_' or removing it"</div><div class="">&nbsp; &nbsp; capture_never_used</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "capture %0 was never used",</div><div class="">&nbsp; &nbsp; variable_never_used</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "%select{variable|immutable value}1 %0 was never used; "</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "consider replacing with '_' or removing it"</div><div class="">&nbsp; &nbsp; variable_never_mutated</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "%select{variable|parameter}1 %0 was never mutated; "</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "consider changing to 'let' constant"</div><div class="">&nbsp; &nbsp; variable_never_read</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "%select{variable|parameter}1 %0 was written to, but never read"</div><div class="">&nbsp; &nbsp; expression_unused_result</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "result of call to %0 is unused"</div><div class="">&nbsp; &nbsp; expression_unused_init_result</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "result of initializer is unused", ())</div><div class="">&nbsp; &nbsp; expression_unused_result_message</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "result of call to %0 is unused: %1"</div><div class="">&nbsp; &nbsp; expression_unused_result_nonmutating</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "result of call to non-mutating function %0 is unused; "</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "use %1 to mutate in-place"</div><div class="">&nbsp; &nbsp; expression_unused_optional_try</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "result of 'try?' is unused"</div><div class="">&nbsp; &nbsp; non_trailing_closure_before_default_args</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "closure parameter prior to parameters with default arguments will "</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "not be treated as a trailing closure"</div><div class="">&nbsp; &nbsp; parameter_extraneous_double_up</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "extraneous duplicate parameter name; %0 already has an argument "</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "label"</div><div class="">&nbsp; &nbsp; parameter_extraneous_empty_name</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "extraneous '_' in parameter: %0 has no keyword argument name"</div><div class="">&nbsp; &nbsp; escaped_parameter_name</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "keyword '%0' does not need to be escaped in argument list"</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">CodeSmell/StrongStylisticHints:</div><div class="">&nbsp; &nbsp; guard_always_succeeds</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "'guard' condition is always true, body is unreachable"</div><div class="">&nbsp; &nbsp; warn_unqualified_access</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "use of %0 treated as a reference to %1 in %2 %3"</div><div class="">&nbsp; &nbsp; var_pattern_didnt_bind_variables</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "'%0' pattern has no effect; sub-pattern didn't bind any variables"</div><div class="">&nbsp; &nbsp; type_inferred_to_undesirable_type</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "%select{variable|constant}2 %0 inferred to have type %1, "</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "which may be unexpected"</div><div class="">&nbsp; &nbsp; no_throw_in_try</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "no calls to throwing functions occur within 'try' expression"</div><div class="">&nbsp; &nbsp; no_throw_in_do_with_catch</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "'catch' block is unreachable because no errors are thrown in 'do' block"</div><div class="">&nbsp; &nbsp; required_initializer_override_keyword</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "'override' is implied when overriding a required initializer"</div><div class="">&nbsp; &nbsp; if_always_true</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "'if' condition is always true"</div><div class="">&nbsp; &nbsp; while_always_true</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "'while' condition is always true"</div><div class="">&nbsp; &nbsp; warn_protocol_witness_optionality</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "%select{type|result|parameter|parameters|"</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "result and parameters}0 of %1 %select{has|has|has|have|have|}0"</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; " different optionality than expected by protocol %2"</div><div class="">&nbsp; &nbsp; optional_req_nonobjc_near_match</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "non-@objc %select{initializer %1|method %1|property %1|subscript}0 "</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "cannot satisfy optional requirement of @objc protocol %2"</div><div class="">&nbsp; &nbsp; override_unnecessary_IUO</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "overriding %0 parameter of type %1 with implicitly unwrapped optional "</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "type %2",</div><div class="">&nbsp; &nbsp; override_unnecessary_result_IUO</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "overriding %0 optional result type %1 with implicitly unwrapped "</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "optional type %2",</div><div class="">&nbsp; &nbsp; inject_forced_downcast, sema_tce, none,</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "treating a forced downcast to %0 as optional will never produce 'nil'"</div><div class="">&nbsp; &nbsp; recursive_accessor_reference, tce_sema, none,</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "attempting to %select{access|modify}1 %0 within its own "</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "%select{getter|setter}1",</div><div class="">&nbsp; &nbsp; store_in_willset, tce_sema, none,</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "attempting to store to property %0 within its own willSet, which is "</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "about to be overwritten by the new value",</div><div class="">&nbsp; &nbsp; isa_is_always_true</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "'%0' test is always true",</div><div class="">&nbsp; &nbsp; conditional_downcast_coercion</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "conditional cast from %0 to %1 always succeeds"</div><div class="">&nbsp; &nbsp; downcast_to_unrelated, sema_tcc, none,</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "cast from %0 to unrelated type %1 always fails"</div><div class="">&nbsp; &nbsp; forced_downcast_noop</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "forced cast of %0 to same type has no effect"</div><div class="">&nbsp; &nbsp; forced_downcast_coercion</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "forced cast from %0 to %1 always succeeds; did you mean to use 'as'?"</div><div class="">&nbsp; &nbsp; extraneous_default_args_in_call</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "call to %0 has extraneous arguments that could use defaults"</div><div class="">&nbsp; &nbsp; unreachable_code</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "will never be executed"</div><div class="">&nbsp; &nbsp; unreachable_code_after_stmt</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "code after '%select{return|break|continue|throw}0' will never "</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "be executed"</div><div class="">&nbsp; &nbsp; unreachable_case</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "%select{case|default}0 will never be executed"</div><div class="">&nbsp; &nbsp; switch_on_a_constant</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "switch condition evaluates to a constant"</div><div class="">&nbsp; &nbsp; integer_conversion_overflow_warn</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "integer overflows when converted from %0 to %1"</div><div class="">&nbsp; &nbsp; integer_literal_overflow_warn</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "integer literal overflows when stored into %0"</div><div class="">&nbsp; &nbsp; trailing_closure_excess_newlines</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "trailing closure is separated from call site by multiple newlines"</div><div class="">&nbsp; &nbsp; lex_nul_character, lexing, none</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "nul character embedded in middle of file"</div><div class="">&nbsp; &nbsp; unindented_code_after_return</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "expression following 'return' is treated as an argument of "</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "the 'return'"</div><div class="">&nbsp; &nbsp; lex_editor_placeholder_in_playground</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "editor placeholder in source file"</div><div class=""><br class=""></div><div class=""><br class=""></div><div class="">Attributes:</div><div class="">&nbsp; &nbsp; attr_availability_unknown_platform</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "unknown platform '%0' for attribute '%1'"</div><div class="">&nbsp; &nbsp; attr_warn_unused_result_expected_name</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "expected parameter 'message' or 'mutable_variant'"</div><div class="">&nbsp; &nbsp; attr_warn_unused_result_duplicate_parameter</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "duplicate '%0' parameter; previous value will be ignored"</div><div class="">&nbsp; &nbsp; attr_warn_unused_result_unknown_parameter</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "unknown parameter '%0' in 'warn_unused_result' attribute"</div><div class="">&nbsp; &nbsp; attr_migration_id_expected_name</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "expected parameter 'pattern'"</div><div class="">&nbsp; &nbsp; attr_migration_id_unknown_parameter</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "unknown parameter '%0' in '_migration_id' attribute"</div><div class="">&nbsp; &nbsp; attr_migration_id_duplicate_parameter</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "duplicate '%0' parameter; previous value will be ignored"</div><div class="">&nbsp; &nbsp; invalid_swift_name_method</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "too %select{few|many}0 parameters in swift_name attribute (expected %1; "</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "got %2)"</div><div class=""><br class=""></div><div class="">Availability:</div><div class="">&nbsp; &nbsp; availability_query_useless_min_deployment</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "unnecessary check for '%0'; minimum deployment target ensures guard "</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "will always be true"</div><div class="">&nbsp; &nbsp; availability_query_useless_enclosing_scope</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "unnecessary check for '%0'; enclosing scope ensures guard "</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "will always be true"</div><div class=""><br class=""></div><div class="">And the below I'm either struggling to think about how to categorize them</div><div class="">(perhaps no category at first), or un-familiar with what they're targeting</div><div class="">&nbsp; &nbsp; warning_from_clang:</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "%0"</div><div class="">&nbsp; &nbsp; could_not_rewrite_bridging_header, none, none,</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "failed to serialize bridging header; "</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "target may not be debuggable outside of its original project"</div><div class="">&nbsp; &nbsp; omit_needless_words</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "%0 could be named %1 [-Womit-needless-words]"</div><div class="">&nbsp; &nbsp; unused_compiler_version_component</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "the second version component is not used for comparison"</div><div class="">&nbsp; &nbsp; unknown_build_config</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "unknown %0 for build configuration '%1'"</div><div class="">&nbsp; &nbsp; sema_import_current_module</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "this file is part of module %0; ignoring import"</div><div class="">&nbsp; &nbsp; sema_import_current_module_with_file</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "file '%0' is part of module %1; ignoring import"</div><div class="">&nbsp; &nbsp; access_control_member_more</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "declaring %select{PRIVATE|an internal|a public}0 %1 for "</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "%select{a private|an internal|PUBLIC}2 %3"</div><div class="">&nbsp; &nbsp; access_control_ext_member_more</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "declaring %select{PRIVATE|an internal|a public}0 %1 in "</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "%select{a private|an internal|PUBLIC}2 extension"</div><div class="">&nbsp; &nbsp; emit_reference_dependencies_without_primary_file</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "ignoring -emit-reference-dependencies (requires -primary-file)"</div><div class="">&nbsp; &nbsp; warning_no_such_sdk</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "no such SDK: '%0'"</div><div class="">&nbsp; &nbsp; warn_cannot_stat_input</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "unable to determine when '%0' was last modified: %1"</div><div class="">&nbsp; &nbsp; warning_unnecessary_repl_mode</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "unnecessary option '%0'; this is the default for '%1' "</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "with no input files"</div><div class="">&nbsp; &nbsp; incremental_requires_output_file_map</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "ignoring -incremental (currently requires an output file map)"</div><div class="">&nbsp; &nbsp; incremental_requires_build_record_entry</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "ignoring -incremental; output file map has no master dependencies "</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; "entry (\"%0\" under \"\")"</div><div class=""><br class=""></div><div class="">I haven’t gotten to how to expose this to the user, and I’ll defer to the community for suggestions in that area.&nbsp;</div></div></div></blockquote><div class=""><br class=""></div><div class="">Just an FYI: We have also talked about performance related warnings at the SIL level (that could potentially be a hard error). We do not have any such thing implemented right now, but keep it in mind.</div><div class=""><br class=""></div><div class="">Michael</div><br class=""><blockquote type="cite" class=""><div class=""><div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div class=""><br class=""></div><img src="https://u2002410.ct.sendgrid.net/wf/open?upn=BsPB5S3Z2usbY-2FzcCsd-2F2r4MihYe9FiKHjzH65yItK7f7rXGpeZLn4ggwakthCXY9jsMkjxaXetlQ-2FOVh-2F08q-2BxdgGtb92cF3LNKcrHq-2FN23sEp-2FRIQ98FAkE-2F3zD1pdwTLo4axVn0cZxg5KYfR1MWT4JdAJeTIpbt2l2-2FxKwM09YhAtSlyRwUMjSFbdvt2zHixij-2FoJri6oECE0G97xSQMAAAQgdA7mG7l3w9Ez7Z0-3D" alt="" width="1" height="1" border="0" class="" style="height: 1px !important; width: 1px !important; border-width: 0px !important; margin: 0px !important; padding: 0px !important;"></div>_______________________________________________<br class="">swift-dev mailing list<br class=""><a href="mailto:swift-dev@swift.org" class="">swift-dev@swift.org</a><br class=""><a href="https://lists.swift.org/mailman/listinfo/swift-dev" class="">https://lists.swift.org/mailman/listinfo/swift-dev</a><br class=""></div></blockquote></div><br class=""></div></div></blockquote></div><br class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><img src="https://u2002410.ct.sendgrid.net/wf/open?upn=dQiUsu-2B7oElbQNHB-2BHmGVzb5qBYjmeaW9iovI-2BLGA5bQH8-2FeadUGuqaKKRK-2FdUmm5rmx-2Fxo3E0crKcK-2FfsRNnS40jsVqqswdlBMijctyR3ZtFGIiEWvU2iaZnnH-2B5-2BgcSFbRMXVy5xj1n1N7YsKEDmnosI0aL-2B5ARdsMnTeiSdinZg8p7qcmzhyuW7fzsOc3vlTP7Dwe4FJvQ3D0yJ06EVcCiSECRDPoLMElPhGIhoQ-3D" alt="" width="1" height="1" border="0" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; height: 1px !important; width: 1px !important; border-width: 0px !important; margin: 0px !important; padding: 0px !important;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class=""><span class="Apple-converted-space">&nbsp;</span></span><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">_______________________________________________</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><span style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;" class="">swift-dev mailing list</span><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><a href="mailto:swift-dev@swift.org" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">swift-dev@swift.org</a><br style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class=""><a href="https://lists.swift.org/mailman/listinfo/swift-dev" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;" class="">https://lists.swift.org/mailman/listinfo/swift-dev</a></div></blockquote></div><br class=""></body></html>