xgupta updated this revision to Diff 541866. xgupta added a comment. Add test case
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D155457/new/ https://reviews.llvm.org/D155457 Files: clang/lib/Sema/SemaChecking.cpp clang/test/Sema/type-limit-compare.cpp Index: clang/test/Sema/type-limit-compare.cpp =================================================================== --- /dev/null +++ clang/test/Sema/type-limit-compare.cpp @@ -0,0 +1,16 @@ +// RUN: %clang_cc1 %s -fsyntax-only -Wtautological-type-limit-compare -verify + +// expected-no-diagnostics + +typedef unsigned long uint64_t; +namespace std { +using size_t = decltype(sizeof(0)); +} // namespace std + +bool func(uint64_t Size) { + if (sizeof(std::size_t) < sizeof(uint64_t) && + Size > (uint64_t)(__SIZE_MAX__)) + return false; + return true; +} + Index: clang/lib/Sema/SemaChecking.cpp =================================================================== --- clang/lib/Sema/SemaChecking.cpp +++ clang/lib/Sema/SemaChecking.cpp @@ -13804,6 +13804,13 @@ if (InRange && IsEnumConstOrFromMacro(S, Constant)) return false; + // Don't warn if the comparison involves the 'size_t' type. + QualType SizeT = S.Context.getSizeType(); + if (S.Context.hasSameType(Constant->getType().getCanonicalType(), SizeT) && + S.Context.hasSameType(Other->getType().getCanonicalType(), SizeT)) { + return false; + } + // A comparison of an unsigned bit-field against 0 is really a type problem, // even though at the type level the bit-field might promote to 'signed int'. if (Other->refersToBitField() && InRange && Value == 0 &&
Index: clang/test/Sema/type-limit-compare.cpp =================================================================== --- /dev/null +++ clang/test/Sema/type-limit-compare.cpp @@ -0,0 +1,16 @@ +// RUN: %clang_cc1 %s -fsyntax-only -Wtautological-type-limit-compare -verify + +// expected-no-diagnostics + +typedef unsigned long uint64_t; +namespace std { +using size_t = decltype(sizeof(0)); +} // namespace std + +bool func(uint64_t Size) { + if (sizeof(std::size_t) < sizeof(uint64_t) && + Size > (uint64_t)(__SIZE_MAX__)) + return false; + return true; +} + Index: clang/lib/Sema/SemaChecking.cpp =================================================================== --- clang/lib/Sema/SemaChecking.cpp +++ clang/lib/Sema/SemaChecking.cpp @@ -13804,6 +13804,13 @@ if (InRange && IsEnumConstOrFromMacro(S, Constant)) return false; + // Don't warn if the comparison involves the 'size_t' type. + QualType SizeT = S.Context.getSizeType(); + if (S.Context.hasSameType(Constant->getType().getCanonicalType(), SizeT) && + S.Context.hasSameType(Other->getType().getCanonicalType(), SizeT)) { + return false; + } + // A comparison of an unsigned bit-field against 0 is really a type problem, // even though at the type level the bit-field might promote to 'signed int'. if (Other->refersToBitField() && InRange && Value == 0 &&
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits