This patch ensures that the switch warning "case value not in enumerated type" isn't shown for opaque enums. We don't know the actual list of values in opaque enums, so that warning is incorrect.
Details
- Reviewers
ahatanak rsmith - Commits
- rG660195f02451: [Sema] Avoid "case value not in enumerated type" warning for C++11 opaque enums
rC289055: [Sema] Avoid "case value not in enumerated type" warning for C++11 opaque enums
rL289055: [Sema] Avoid "case value not in enumerated type" warning for C++11 opaque enums
Diff Detail
- Repository
- rL LLVM
Event Timeline
lib/Sema/SemaStmt.cpp | ||
---|---|---|
1165 | This function used to call setAllEnumCasesCovered() when parsing a switch statement with an opaque enum condition, but this patch changes the behavior. I couldn't tell whether isAllEnumCasesCovered should return true or false for such switch statements, but was this change intentional? |
lib/Sema/SemaStmt.cpp | ||
---|---|---|
1165 | You're right, good catch! Originally it wasn't intentional, but I've looked over this change and it seems like the right change to me. We can't know if we actually covered all enum cases when checking an opaque enum because we don't know which cases the enum has (unless we have a switch that covers all the of possible values of the enum's integer type)! It seems that the previous behaviour was incorrect. |
This function used to call setAllEnumCasesCovered() when parsing a switch statement with an opaque enum condition, but this patch changes the behavior. I couldn't tell whether isAllEnumCasesCovered should return true or false for such switch statements, but was this change intentional?