swiftlang/swift

[SR-8213] Compiler may indicate "case will never be executed" even if it is unavoidable to execute the case in switch statement.

オープン

#50,745 opened on 2018/07/10

 (14 件のコメント) (0 件のリアクション) (0 人の担当者)Swift (10,719 件のフォーク)batch import
SILGenbugcompilerdiagnostics qualitygood first issuepattern matchingpatternsstatementsswift 5.9switchswitch casestype checker

Repository metrics

Stars
 (69,989 個のスター)
PR merge metrics
 (平均マージ 8d 17h) (30d で 510 merged PRs)

説明

Previous ID SR-8213
Radar None
Original Reporter @YOCKOW
Type Bug
  • OS: macOS, Ubuntu 16.04

  • Swift: 4.1.2, 4.2-DEVELOPMENT-SNAPSHOT-2018-07-08

Votes 0
Component/s Compiler
Labels Bug, DiagnosticsQoI, StarterBug
Assignee Gabriel Igliozzi (JIRA)
Priority Medium

md5: df5f44ab5b8a1d3c8ee6ed4a803d858c

is duplicated by:

  • SR-11318 Incorrect "Case will never be executed" warning

Issue Description:

(As I commented on SR-8208,) The compiler shows a wrong warning, when the following code is compiled:

enum E {
  case a // only one case
}

func f(_ e0:E, _ e1:E) {
  switch (e0, e1) {
  case (.a, _): print("e0 is .a") // -> No warning.
  }
  
  switch (e0, e1) {
  case (.a, _), (_, .a): print("e0 or e1 is .a") // -> warning: case will never be executed
  }
}

f(.a, .a)

Consideration

  • The warning should be
    • case will be always executed
    • (_, .a) will never match
    • ... and so on

コントリビューターガイド