red1bluelost updated this revision to Diff 424053. red1bluelost added a comment.
Updates patch based on comments. Silences the sign conversions on enum-to-enum so that only enum-to-enum will warn. Simplifies the test case since now only one warning occurs. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D123009/new/ https://reviews.llvm.org/D123009 Files: clang/lib/Sema/SemaChecking.cpp clang/test/Sema/enum-enum-conversion.c Index: clang/test/Sema/enum-enum-conversion.c =================================================================== --- /dev/null +++ clang/test/Sema/enum-enum-conversion.c @@ -0,0 +1,25 @@ +// RUN: %clang_cc1 -triple=x86_64-pc-linux-gnu -fsyntax-only -Wenum-conversion -verify %s +// RUN: %clang_cc1 -triple=x86_64-pc-linux-gnu -fsyntax-only -Wconversion -verify %s + +// Signed enums +enum SE1 { N1 = -1 }; +enum SE2 { N2 = -2 }; +// Unsigned unums +enum UE1 { P1 }; +enum UE2 { P2 }; + +enum UE2 f1(enum UE1 E) { + return E; // expected-warning {{implicit conversion from enumeration type 'enum UE1' to different enumeration type 'enum UE2'}} +} + +enum SE1 f2(enum UE1 E) { + return E; // expected-warning {{implicit conversion from enumeration type 'enum UE1' to different enumeration type 'enum SE1'}} +} + +enum UE1 f3(enum SE1 E) { + return E; // expected-warning {{implicit conversion from enumeration type 'enum SE1' to different enumeration type 'enum UE1'}} +} + +enum SE2 f4(enum SE1 E) { + return E; // expected-warning {{implicit conversion from enumeration type 'enum SE1' to different enumeration type 'enum SE2'}} +} Index: clang/lib/Sema/SemaChecking.cpp =================================================================== --- clang/lib/Sema/SemaChecking.cpp +++ clang/lib/Sema/SemaChecking.cpp @@ -13534,9 +13534,10 @@ // Fall through for non-constants to give a sign conversion warning. } - if ((TargetRange.NonNegative && !LikelySourceRange.NonNegative) || - (!TargetRange.NonNegative && LikelySourceRange.NonNegative && - LikelySourceRange.Width == TargetRange.Width)) { + if ((!isa<EnumType>(Target) || !isa<EnumType>(Source)) && + ((TargetRange.NonNegative && !LikelySourceRange.NonNegative) || + (!TargetRange.NonNegative && LikelySourceRange.NonNegative && + LikelySourceRange.Width == TargetRange.Width))) { if (S.SourceMgr.isInSystemMacro(CC)) return;
Index: clang/test/Sema/enum-enum-conversion.c =================================================================== --- /dev/null +++ clang/test/Sema/enum-enum-conversion.c @@ -0,0 +1,25 @@ +// RUN: %clang_cc1 -triple=x86_64-pc-linux-gnu -fsyntax-only -Wenum-conversion -verify %s +// RUN: %clang_cc1 -triple=x86_64-pc-linux-gnu -fsyntax-only -Wconversion -verify %s + +// Signed enums +enum SE1 { N1 = -1 }; +enum SE2 { N2 = -2 }; +// Unsigned unums +enum UE1 { P1 }; +enum UE2 { P2 }; + +enum UE2 f1(enum UE1 E) { + return E; // expected-warning {{implicit conversion from enumeration type 'enum UE1' to different enumeration type 'enum UE2'}} +} + +enum SE1 f2(enum UE1 E) { + return E; // expected-warning {{implicit conversion from enumeration type 'enum UE1' to different enumeration type 'enum SE1'}} +} + +enum UE1 f3(enum SE1 E) { + return E; // expected-warning {{implicit conversion from enumeration type 'enum SE1' to different enumeration type 'enum UE1'}} +} + +enum SE2 f4(enum SE1 E) { + return E; // expected-warning {{implicit conversion from enumeration type 'enum SE1' to different enumeration type 'enum SE2'}} +} Index: clang/lib/Sema/SemaChecking.cpp =================================================================== --- clang/lib/Sema/SemaChecking.cpp +++ clang/lib/Sema/SemaChecking.cpp @@ -13534,9 +13534,10 @@ // Fall through for non-constants to give a sign conversion warning. } - if ((TargetRange.NonNegative && !LikelySourceRange.NonNegative) || - (!TargetRange.NonNegative && LikelySourceRange.NonNegative && - LikelySourceRange.Width == TargetRange.Width)) { + if ((!isa<EnumType>(Target) || !isa<EnumType>(Source)) && + ((TargetRange.NonNegative && !LikelySourceRange.NonNegative) || + (!TargetRange.NonNegative && LikelySourceRange.NonNegative && + LikelySourceRange.Width == TargetRange.Width))) { if (S.SourceMgr.isInSystemMacro(CC)) return;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits