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 建立於 2018年7月10日

 (14 則留言) (0 個反應) (0 位負責人)Swift (10,719 個分叉)batch import
SILGenbugcompilerdiagnostics qualitygood first issuepattern matchingpatternsstatementsswift 5.9switchswitch casestype checker

倉庫指標

星標
 (69,989 顆星)
PR 合併指標
 (PR 指標待抓取)

描述

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

貢獻者指南