[clang] [Clang] Make the result type of sizeof/pointer subtraction/size_t literals be typedefs instead of built-in types (PR #143653)
Matheus Izvekov via cfe-commits
cfe-commits at lists.llvm.org
Wed Jun 11 10:02:25 PDT 2025
================
@@ -320,6 +321,69 @@ bool clang::analyze_format_string::ParseUTF8InvalidSpecifier(
// Methods on ArgType.
//===----------------------------------------------------------------------===//
+static bool namedTypeToLengthModifierKind(QualType QT,
+ LengthModifier::Kind &K) {
+ for (/**/; const auto *TT = QT->getAs<TypedefType>();
+ QT = TT->getDecl()->getUnderlyingType()) {
+ StringRef Name = TT->getDecl()->getIdentifier()->getName();
+ if (Name == "size_t" || Name == "__size_t") {
+ K = LengthModifier::AsSizeT;
+ return true;
+ } else if (Name == "__signed_size_t" ||
+ Name == "ssize_t" /*Not C99, but common in Unix.*/) {
+ K = LengthModifier::AsSizeT;
+ return true;
+ } else if (Name == "ptrdiff_t" || Name == "__ptrdiff_t") {
+ K = LengthModifier::AsPtrDiff;
+ return true;
+ } else if (Name == "intmax_t") {
+ K = LengthModifier::AsIntMax;
+ return true;
+ } else if (Name == "uintmax_t") {
+ K = LengthModifier::AsIntMax;
+ return true;
+ }
+ }
+ return false;
----------------
mizvekov wrote:
I understand, but this will still match a user defined size_t in an arbitrary namespace, which looks suspicious.
I think this should check these typedefs are in the correct scope, and also this probably should be restricted to the implicit stuff, in -ffreestanding mode.
https://github.com/llvm/llvm-project/pull/143653
More information about the cfe-commits
mailing list