<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<div name="messageBodySection">
<div dir="auto">Hello LLVM / Clang devs,
<div><br /></div>
<div>I wanted to ask about the purpose of the warning that appears when you try to combine an `@available()` statement with anything else (`Wunsupported-availability-guard`). To recap, it _______. The problem is that it only works without a warning if it's the sole expression in an if statement. If you use it in any other context, you get a warning:</div>
<div><br /></div>
<div>    @available does not guard availability here; use if (@available) instead</div>
<div><br /></div>
<div>As an example, all of the snippets below produce the warning:</div>
<div><br /></div>
<div>    if (@available(iOS 12.1, *) && otherCondition) { … }</div>
<div>    </div>
<div>    if (!@available(iOS 13, *)) {</div>
<div>        // Code to run without iOS 13</div>
<div>    }</div>
<div>    </div>
<div>    return @available(iOS 11, *);</div>
<div><br /></div>
<div>But these are all ways I would expect anyone to try to use this feature once told about it. The presence of this warning causes developers to work around it in convoluted ways that produce less concise, less readable code, often by nesting if statements or leaving the if empty in an if-else statement:</div>
<div><br /></div>
<div>    if (@available(iOS 12.1, *)) {</div>
<div>        if (otherCondition) { … }</div>
<div>    }</div>
<div>    </div>
<div>    // Alternatively... second condition</div>
<div>    if (@available(iOS 12.1, *)) if (otherCondition) {</div>
<div>        …</div>
<div>    }</div>
<div>    </div>
<div>    if (@available(iOS 13, *)) { // Nothing }</div>
<div>    else {</div>
<div>        // Code to run without iOS 13</div>
<div>    }</div>
<div>    </div>
<div>    if (@available(iOS 11, *)) {</div>
<div>        return YES;</div>
<div>    } else {</div>
<div>        return NO;</div>
<div>    }</div>
<div><br /></div>
<div>So, I guess I have two questions:</div>
<div><br /></div>
<div>1) What is the scope/purpose of/reasoning behind the warning?</div>
<div>2) Assuming the warning serves a meaningful purpose for the examples above, what is that purpose?</div>
</div>
</div>
<div name="messageReplySection">
<blockquote type="cite" class="spark_quote" style="margin: 5px 5px; padding-left: 10px; border-left: thin solid #1abc9c;">
<div name="messageBodySection">
<div dir="auto"></div>
</div>
</blockquote>
</div>
</body>
</html>