The Swift compiler marks function arguments for a number of reasons, mostly related to internal optimizations. For your question, we'll focus on the mangler, as that's what's contributing to your pretty stack trace, and the Node Printer. As of the time of this post, the function specialization mangler has 6 marks it can apply to an argument:

  • Dead

    The argument is unused in the function body and can be removed in a dead argument elimination pass.

  • Closure

    The argument is a closure and may require further mangling/demangling.

  • Constant

    The argument is a constant.

  • Owned to Guaranteed

    A caller-owned argument transfers ownership to the callee. The argument thus has a strong reference associated with it [the caller] and is guaranteed to live through the call, so the compiler allows the caller to elide the transfer and instead aggregate retains itself.

  • SROA

    Scalar Replacement of Aggregates pass should optimize this argument.

  • In Out To Value

    The parameter was marked inout but the callee doesn't actually mutate it.

The AST Node Printer adds one more mark

  • Exploded

    The value comes with an explosion schema that has been realized when the call was made.

For all intents and purposes we only care about DeadOwned to Guaranteed, and Exploded

The only one that may still seem mystifying is Exploded. An Explosion is an optimization construct the Swift compiler uses to determine a strategy to unpack values from small structs and enums into registers. Thus, when the Node Printer says a value is Exploded, what it means it has already unpacked the value into registers before the call.

 

https://stackoverflow.com/questions/30764669/whats-dead-exploded-in-swifts-exception-stack

------------------越是喧嚣的世界,越需要宁静的思考------------------ 合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下。 积土成山,风雨兴焉;积水成渊,蛟龙生焉;积善成德,而神明自得,圣心备焉。故不积跬步,无以至千里;不积小流,无以成江海。骐骥一跃,不能十步;驽马十驾,功在不舍。锲而舍之,朽木不折;锲而不舍,金石可镂。蚓无爪牙之利,筋骨之强,上食埃土,下饮黄泉,用心一也。蟹六跪而二螯,非蛇鳝之穴无可寄托者,用心躁也。