Author: Abhinav Kumar Date: 2025-03-26T16:07:51+01:00 New Revision: 99e8321953a047a2994639df3df496cab779e199
URL: https://github.com/llvm/llvm-project/commit/99e8321953a047a2994639df3df496cab779e199 DIFF: https://github.com/llvm/llvm-project/commit/99e8321953a047a2994639df3df496cab779e199.diff LOG: [clang][analyzer] Ignore unnamed bitfields in UninitializedObjectChecker (#132427) Fixes #132001 Co-authored-by: YLChenZ <chentongyon...@gmail.com> Added: Modified: clang/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObjectChecker.cpp clang/test/Analysis/cxx-uninitialized-object.cpp Removed: ################################################################################ diff --git a/clang/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObjectChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObjectChecker.cpp index 6e1222fedad3e..98b0fbeb72fbb 100644 --- a/clang/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObjectChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/UninitializedObject/UninitializedObjectChecker.cpp @@ -291,7 +291,9 @@ bool FindUninitializedFields::isNonUnionUninit(const TypedValueRegion *R, // Are all of this non-union's fields initialized? for (const FieldDecl *I : RD->fields()) { - + if (I->isUnnamedBitField()) { + continue; + } const auto FieldVal = State->getLValue(I, loc::MemRegionVal(R)).castAs<loc::MemRegionVal>(); const auto *FR = FieldVal.getRegionAs<FieldRegion>(); diff --git a/clang/test/Analysis/cxx-uninitialized-object.cpp b/clang/test/Analysis/cxx-uninitialized-object.cpp index e3fa8ae8d7f29..43b1628388509 100644 --- a/clang/test/Analysis/cxx-uninitialized-object.cpp +++ b/clang/test/Analysis/cxx-uninitialized-object.cpp @@ -1182,3 +1182,24 @@ void fComplexTest() { // TODO: we should emit a warning for x2.x and x2.y. ComplexUninitTest x2; } + +struct PaddingBitfieldTest { + int a; + long long : 7; // padding, previously flagged as uninitialized + PaddingBitfieldTest(int a) : a(a) {} +}; + +void fPaddingBitfieldTest() { + PaddingBitfieldTest pb(42); + // no-warning: Unnamed bitfield is now ignored, fixing false positive +} + +struct NamedBitfieldTest { + int b; + long long named : 7; // expected-note{{uninitialized field 'this->named'}} + NamedBitfieldTest(int b) : b(b) {} // expected-warning{{1 uninitialized field at the end of the constructor call}} +}; + +void fNamedBitfieldTest() { + NamedBitfieldTest nb(42); +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits