- Useful warning
- GCC compatibility (GCC warns in C++ mode)
Details
Diff Detail
- Repository
- rL LLVM
Event Timeline
| test/Sema/warn-conditional-emum-types-mismatch.c | ||
|---|---|---|
| 19 ↗ | (On Diff #221346) | Gcc warns here, but Clang does not warn when A != C.. So not sure here.. |
| lib/Sema/SemaChecking.cpp | ||
|---|---|---|
| 11264 ↗ | (On Diff #221346) | const auto * (and below as well) since the type is spelled out in the initialization. |
| 11272–11274 ↗ | (On Diff #221346) | Would it make sense to use !LHSEnumType->getDecl()->hasNameForLinkage() here? It seems like that's the situation we care about. |
| 11785 ↗ | (On Diff #221346) | Might make sense to name the new function CheckConditionalWithEnumTypes() to match the local style better. |
| test/Sema/warn-conditional-emum-types-mismatch.c | ||
| 15 ↗ | (On Diff #221346) | Spurious ' |
| 19 ↗ | (On Diff #221346) | My gut reaction is that I think Clang should warn here as well because the code pattern is confusing, but I'd also say that if there's a lot of false positives where the code is sensible, it may make sense to suppress the diagnostic. One situation I was thinking of where you could run into something like this is: enum {
STATUS_SUCCESS,
STATUS_FAILURE,
...
MAX_BASE_STATUS_CODE
};
enum ExtendedStatusCodes {
STATUS_SOMETHING_INTERESTING = MAX_BASE_STATUS_CODE + 1000,
...
};
int whatever(void) {
return some_condition() ? STATUS_SOMETHING_INTERESTING : STATUS_SUCCESS;
} |
| test/Sema/warn-conditional-emum-types-mismatch.c | ||
|---|---|---|
| 19 ↗ | (On Diff #221346) | +1 |
LGTM aside from a commenting request.
| test/Sema/warn-conditional-emum-types-mismatch.c | ||
|---|---|---|
| 19 ↗ | (On Diff #221346) | Can you add some comments to the test case explaining that we purposefully differ from GCC here and why? |