llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: Alex Bradbury (asb)

<details>
<summary>Changes</summary>

Reverts llvm/llvm-project#<!-- -->130182

This is causing failures on RISC-V and ppc builders as mentioned on 
https://github.com/llvm/llvm-project/pull/130182#issuecomment-2775516899

Posting PR to check it reverts cleanly and pre-commit CI is happy. I'm happy 
with alternate fixes that don't require a revert, but getting this in the 
pipeline as one option.

CC @<!-- -->therealcoochieman 

---
Full diff: https://github.com/llvm/llvm-project/pull/134239.diff


4 Files Affected:

- (modified) clang/docs/ReleaseNotes.rst (-2) 
- (modified) clang/lib/AST/RecordLayoutBuilder.cpp (+11-54) 
- (removed) clang/test/SemaCXX/windows-Wpadded-bitfield.cpp (-32) 
- (removed) clang/test/SemaCXX/windows-Wpadded.cpp (-40) 


``````````diff
diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst
index 47f9c3caa0e47..fdf9a246d6373 100644
--- a/clang/docs/ReleaseNotes.rst
+++ b/clang/docs/ReleaseNotes.rst
@@ -190,8 +190,6 @@ Modified Compiler Flags
 
 - The compiler flag `-fbracket-depth` default value is increased from 256 to 
2048. (#GH94728)
 
-- `-Wpadded` option implemented for the `x86_64-windows-msvc` target. Fixes 
#61702
-
 Removed Compiler Flags
 -------------------------
 
diff --git a/clang/lib/AST/RecordLayoutBuilder.cpp 
b/clang/lib/AST/RecordLayoutBuilder.cpp
index 41e7198cb7581..3e756ab9b9bfe 100644
--- a/clang/lib/AST/RecordLayoutBuilder.cpp
+++ b/clang/lib/AST/RecordLayoutBuilder.cpp
@@ -2274,9 +2274,9 @@ static unsigned getPaddingDiagFromTagKind(TagTypeKind 
Tag) {
   }
 }
 
-static void CheckFieldPadding(const ASTContext &Context, bool IsUnion,
-                              uint64_t Offset, uint64_t UnpaddedOffset,
-                              const FieldDecl *D) {
+void ItaniumRecordLayoutBuilder::CheckFieldPadding(
+    uint64_t Offset, uint64_t UnpaddedOffset, uint64_t UnpackedOffset,
+    unsigned UnpackedAlign, bool isPacked, const FieldDecl *D) {
   // We let objc ivars without warning, objc interfaces generally are not used
   // for padding tricks.
   if (isa<ObjCIvarDecl>(D))
@@ -2300,8 +2300,7 @@ static void CheckFieldPadding(const ASTContext &Context, 
bool IsUnion,
     if (D->getIdentifier()) {
       auto Diagnostic = D->isBitField() ? diag::warn_padded_struct_bitfield
                                         : diag::warn_padded_struct_field;
-      Context.getDiagnostics().Report(D->getLocation(),
-                                      Diagnostic)
+      Diag(D->getLocation(), Diagnostic)
           << getPaddingDiagFromTagKind(D->getParent()->getTagKind())
           << Context.getTypeDeclType(D->getParent()) << PadSize
           << (InBits ? 1 : 0) // (byte|bit)
@@ -2309,22 +2308,15 @@ static void CheckFieldPadding(const ASTContext 
&Context, bool IsUnion,
     } else {
       auto Diagnostic = D->isBitField() ? 
diag::warn_padded_struct_anon_bitfield
                                         : diag::warn_padded_struct_anon_field;
-      Context.getDiagnostics().Report(D->getLocation(),
-                                      Diagnostic)
+      Diag(D->getLocation(), Diagnostic)
           << getPaddingDiagFromTagKind(D->getParent()->getTagKind())
           << Context.getTypeDeclType(D->getParent()) << PadSize
           << (InBits ? 1 : 0); // (byte|bit)
     }
-  }
-}
-
-void ItaniumRecordLayoutBuilder::CheckFieldPadding(
-    uint64_t Offset, uint64_t UnpaddedOffset, uint64_t UnpackedOffset,
-    unsigned UnpackedAlign, bool isPacked, const FieldDecl *D) {
-  ::CheckFieldPadding(Context, IsUnion, Offset, UnpaddedOffset, D);
-  if (isPacked && Offset != UnpackedOffset) {
-    HasPackedField = true;
-  }
+ }
+ if (isPacked && Offset != UnpackedOffset) {
+   HasPackedField = true;
+ }
 }
 
 static const CXXMethodDecl *computeKeyFunction(ASTContext &Context,
@@ -2650,6 +2642,8 @@ struct MicrosoftRecordLayoutBuilder {
   /// virtual base classes and their offsets in the record.
   ASTRecordLayout::VBaseOffsetsMapTy VBases;
   /// The number of remaining bits in our last bitfield allocation.
+  /// This value isn't meaningful unless LastFieldIsNonZeroWidthBitfield is
+  /// true.
   unsigned RemainingBitsInField;
   bool IsUnion : 1;
   /// True if the last field laid out was a bitfield and was not 0
@@ -3010,15 +3004,6 @@ void MicrosoftRecordLayoutBuilder::layoutField(const 
FieldDecl *FD) {
   } else {
     FieldOffset = Size.alignTo(Info.Alignment);
   }
-
-  uint64_t UnpaddedFielddOffsetInBits =
-      Context.toBits(DataSize) - RemainingBitsInField;
-
-  ::CheckFieldPadding(Context, IsUnion, Context.toBits(FieldOffset),
-                      UnpaddedFielddOffsetInBits, FD);
-
-  RemainingBitsInField = 0;
-
   placeFieldAtOffset(FieldOffset);
 
   if (!IsOverlappingEmptyField)
@@ -3064,14 +3049,10 @@ void MicrosoftRecordLayoutBuilder::layoutBitField(const 
FieldDecl *FD) {
   } else {
     // Allocate a new block of memory and place the bitfield in it.
     CharUnits FieldOffset = Size.alignTo(Info.Alignment);
-    uint64_t UnpaddedFieldOffsetInBits =
-        Context.toBits(DataSize) - RemainingBitsInField;
     placeFieldAtOffset(FieldOffset);
     Size = FieldOffset + Info.Size;
     Alignment = std::max(Alignment, Info.Alignment);
     RemainingBitsInField = Context.toBits(Info.Size) - Width;
-    ::CheckFieldPadding(Context, IsUnion, Context.toBits(FieldOffset),
-                        UnpaddedFieldOffsetInBits, FD);
   }
   DataSize = Size;
 }
@@ -3095,14 +3076,9 @@ 
MicrosoftRecordLayoutBuilder::layoutZeroWidthBitField(const FieldDecl *FD) {
   } else {
     // Round up the current record size to the field's alignment boundary.
     CharUnits FieldOffset = Size.alignTo(Info.Alignment);
-    uint64_t UnpaddedFieldOffsetInBits =
-        Context.toBits(DataSize) - RemainingBitsInField;
     placeFieldAtOffset(FieldOffset);
-    RemainingBitsInField = 0;
     Size = FieldOffset;
     Alignment = std::max(Alignment, Info.Alignment);
-    ::CheckFieldPadding(Context, IsUnion, Context.toBits(FieldOffset),
-                        UnpaddedFieldOffsetInBits, FD);
   }
   DataSize = Size;
 }
@@ -3227,9 +3203,6 @@ void 
MicrosoftRecordLayoutBuilder::layoutVirtualBases(const CXXRecordDecl *RD) {
 }
 
 void MicrosoftRecordLayoutBuilder::finalizeLayout(const RecordDecl *RD) {
-  uint64_t UnpaddedSizeInBits = Context.toBits(DataSize);
-  UnpaddedSizeInBits -= RemainingBitsInField;
-
   // Respect required alignment.  Note that in 32-bit mode Required alignment
   // may be 0 and cause size not to be updated.
   DataSize = Size;
@@ -3258,22 +3231,6 @@ void MicrosoftRecordLayoutBuilder::finalizeLayout(const 
RecordDecl *RD) {
     Size = Context.toCharUnitsFromBits(External.Size);
     if (External.Align)
       Alignment = Context.toCharUnitsFromBits(External.Align);
-    return;
-  }
-  unsigned CharBitNum = Context.getTargetInfo().getCharWidth();
-  uint64_t SizeInBits = Context.toBits(Size);
-  if (SizeInBits > UnpaddedSizeInBits) {
-    unsigned int PadSize = SizeInBits - UnpaddedSizeInBits;
-    bool InBits = true;
-    if (PadSize % CharBitNum == 0) {
-      PadSize = PadSize / CharBitNum;
-      InBits = false;
-    }
-
-    Context.getDiagnostics().Report(RD->getLocation(),
-                                    diag::warn_padded_struct_size)
-        << Context.getTypeDeclType(RD) << PadSize
-        << (InBits ? 1 : 0); // (byte|bit)
   }
 }
 
diff --git a/clang/test/SemaCXX/windows-Wpadded-bitfield.cpp 
b/clang/test/SemaCXX/windows-Wpadded-bitfield.cpp
deleted file mode 100644
index ee5a57124eca5..0000000000000
--- a/clang/test/SemaCXX/windows-Wpadded-bitfield.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-// RUN: %clang_cc1 -triple x86_64-windows-msvc -fsyntax-only -verify -Wpadded 
%s
-
-struct __attribute__((ms_struct)) BitfieldStruct { // expected-warning 
{{padding size of 'BitfieldStruct' with 3 bytes to alignment boundary}}
-  char c : 1;
-  int : 0; // expected-warning {{padding struct 'BitfieldStruct' with 31 bits 
to align anonymous bit-field}}
-  char i;
-};
-
-struct __attribute__((ms_struct)) SevenBitfieldStruct { // expected-warning 
{{padding size of 'SevenBitfieldStruct' with 3 bytes to alignment boundary}}
-  char c : 7;
-  int : 0; // expected-warning {{padding struct 'SevenBitfieldStruct' with 25 
bits to align anonymous bit-field}}
-  char i;
-};
-
-struct __attribute__((ms_struct)) SameUnitSizeBitfield {
-  char c : 7;
-  char : 1; // Same unit size attributes fall in the same unit + they fill the 
unit -> no padding
-  char i;
-};
-
-struct __attribute__((ms_struct)) DifferentUnitSizeBitfield { // 
expected-warning {{padding size of 'DifferentUnitSizeBitfield' with 3 bytes to 
alignment boundary}}
-  char c : 7;
-  int : 1; // expected-warning {{padding struct 'DifferentUnitSizeBitfield' 
with 25 bits to align anonymous bit-field}}
-  char i; // expected-warning {{padding struct 'DifferentUnitSizeBitfield' 
with 31 bits to align 'i'}}
-};
-
-int main() {
-  BitfieldStruct b;
-  SevenBitfieldStruct s;
-  SameUnitSizeBitfield su;
-  DifferentUnitSizeBitfield du;
-}
diff --git a/clang/test/SemaCXX/windows-Wpadded.cpp 
b/clang/test/SemaCXX/windows-Wpadded.cpp
deleted file mode 100644
index da3f2bf08c6b8..0000000000000
--- a/clang/test/SemaCXX/windows-Wpadded.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-// RUN: %clang_cc1 -triple x86_64-windows-msvc -fsyntax-only -verify -Wpadded 
%s
-// RUN: %clang_cc1 -triple x86_64-linux-gnu -fsyntax-only -verify -Wpadded %s
-
-struct __attribute__((ms_struct)) Foo { // expected-warning {{padding size of 
'Foo' with 3 bytes to alignment boundary}}
-  int b : 1;
-  char a; // expected-warning {{padding struct 'Foo' with 31 bits to align 
'a'}}
-};
-
-struct __attribute__((ms_struct)) AlignedStruct { // expected-warning 
{{padding size of 'AlignedStruct' with 4 bytes to alignment boundary}}
-  char c;
-  alignas(8) int i; // expected-warning {{padding struct 'AlignedStruct' with 
7 bytes to align 'i'}}
-};
-
-
-struct Base {
-  int b;
-};
-
-struct Derived : public Base { // expected-warning {{padding size of 'Derived' 
with 3 bytes to alignment boundary}}
-  char c;
-};
-
-union __attribute__((ms_struct)) Union {
-  char c;
-  long long u;
-};
-
-struct __attribute__((ms_struct)) StructWithUnion { // expected-warning 
{{padding size of 'StructWithUnion' with 6 bytes to alignment boundary}}
-  char c;
-  int : 0;
-  Union t; // expected-warning {{padding struct 'StructWithUnion' with 7 bytes 
to align 't'}}
-  short i;
-};
-
-int main() {
-  Foo f;
-  AlignedStruct a;
-  Derived d;
-  StructWithUnion swu;
-}

``````````

</details>


https://github.com/llvm/llvm-project/pull/134239
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to