[clang] 3aec4b3 - Revert "Unaligned Access Warning Added"
Archibald Elliott via cfe-commits
cfe-commits at lists.llvm.org
Fri Jan 7 05:09:04 PST 2022
Author: Archibald Elliott
Date: 2022-01-07T13:07:30Z
New Revision: 3aec4b3d348d69e6c1ead7cba54677b855293983
URL: https://github.com/llvm/llvm-project/commit/3aec4b3d348d69e6c1ead7cba54677b855293983
DIFF: https://github.com/llvm/llvm-project/commit/3aec4b3d348d69e6c1ead7cba54677b855293983.diff
LOG: Revert "Unaligned Access Warning Added"
This reverts commits:
- 2cd2600abaf3c604889b77ab408fdf89d7a21c48
- 11c67e5a4e99f51ec66c9781710f81955cfd5e24
Due to test failures on Windows.
Added:
Modified:
clang/include/clang/Basic/DiagnosticASTKinds.td
clang/include/clang/Basic/DiagnosticGroups.td
clang/lib/AST/RecordLayoutBuilder.cpp
clang/lib/Driver/ToolChains/Arch/AArch64.cpp
clang/lib/Driver/ToolChains/Arch/AArch64.h
clang/lib/Driver/ToolChains/Arch/ARM.cpp
clang/lib/Driver/ToolChains/Clang.cpp
Removed:
clang/test/Sema/test-wunaligned-access.c
clang/test/Sema/test-wunaligned-access.cpp
################################################################################
diff --git a/clang/include/clang/Basic/DiagnosticASTKinds.td b/clang/include/clang/Basic/DiagnosticASTKinds.td
index d870a9f06592a..d788c85179142 100644
--- a/clang/include/clang/Basic/DiagnosticASTKinds.td
+++ b/clang/include/clang/Basic/DiagnosticASTKinds.td
@@ -590,9 +590,4 @@ def warn_padded_struct_size : Warning<
InGroup<Padded>, DefaultIgnore;
def warn_unnecessary_packed : Warning<
"packed attribute is unnecessary for %0">, InGroup<Packed>, DefaultIgnore;
-
-// -Wunaligned-access
-def warn_unaligned_access : Warning<
- "field %1 within its parent %0 has an alignment greater than its parent "
- "this may be caused by %0 being packed and can lead to unaligned accesses">, InGroup<UnalignedAccess>, DefaultIgnore;
}
diff --git a/clang/include/clang/Basic/DiagnosticGroups.td b/clang/include/clang/Basic/DiagnosticGroups.td
index bc4bb17b271d8..c0642efaee4eb 100644
--- a/clang/include/clang/Basic/DiagnosticGroups.td
+++ b/clang/include/clang/Basic/DiagnosticGroups.td
@@ -542,7 +542,6 @@ def ExplicitInitializeCall : DiagGroup<"explicit-initialize-call">;
def OrderedCompareFunctionPointers : DiagGroup<"ordered-compare-function-pointers">;
def Packed : DiagGroup<"packed">;
def Padded : DiagGroup<"padded">;
-def UnalignedAccess : DiagGroup<"unaligned-access">;
def PessimizingMove : DiagGroup<"pessimizing-move">;
def ReturnStdMove : DiagGroup<"return-std-move">;
diff --git a/clang/lib/AST/RecordLayoutBuilder.cpp b/clang/lib/AST/RecordLayoutBuilder.cpp
index 8d2fe4660a3cd..3e39ec1c718d1 100644
--- a/clang/lib/AST/RecordLayoutBuilder.cpp
+++ b/clang/lib/AST/RecordLayoutBuilder.cpp
@@ -2021,7 +2021,6 @@ void ItaniumRecordLayoutBuilder::LayoutField(const FieldDecl *D,
CharUnits UnpackedFieldAlign =
!DefaultsToAIXPowerAlignment ? FieldAlign : PreferredAlign;
CharUnits UnpackedFieldOffset = FieldOffset;
- CharUnits OriginalFieldAlign = UnpackedFieldAlign;
if (FieldPacked) {
FieldAlign = CharUnits::One();
@@ -2106,22 +2105,6 @@ void ItaniumRecordLayoutBuilder::LayoutField(const FieldDecl *D,
// Remember max struct/class ABI-specified alignment.
UnadjustedAlignment = std::max(UnadjustedAlignment, FieldAlign);
UpdateAlignment(FieldAlign, UnpackedFieldAlign, PreferredAlign);
-
- // For checking the alignment of inner fields against
- // the alignment of its parent record.
- if (const RecordDecl *RD = D->getParent()) {
- // Check if packed attribute or pragma pack is present.
- if (RD->hasAttr<PackedAttr>() || !MaxFieldAlignment.isZero())
- if (FieldAlign < OriginalFieldAlign)
- if (D->getType()->isRecordType()) {
- // If the offset is a multiple of the alignment of
- // the type, raise the warning.
- // TODO: Takes no account the alignment of the outer struct
- if (FieldOffset % OriginalFieldAlign != 0)
- Diag(D->getLocation(), diag::warn_unaligned_access)
- << Context.getTypeDeclType(RD) << D->getName();
- }
- }
}
void ItaniumRecordLayoutBuilder::FinishLayout(const NamedDecl *D) {
diff --git a/clang/lib/Driver/ToolChains/Arch/AArch64.cpp b/clang/lib/Driver/ToolChains/Arch/AArch64.cpp
index 89a77a368ef02..9ffb5d73b2aad 100644
--- a/clang/lib/Driver/ToolChains/Arch/AArch64.cpp
+++ b/clang/lib/Driver/ToolChains/Arch/AArch64.cpp
@@ -221,7 +221,6 @@ getAArch64MicroArchFeaturesFromMcpu(const Driver &D, StringRef Mcpu,
void aarch64::getAArch64TargetFeatures(const Driver &D,
const llvm::Triple &Triple,
const ArgList &Args,
- llvm::opt::ArgStringList &CmdArgs,
std::vector<StringRef> &Features,
bool ForAS) {
Arg *A;
@@ -465,16 +464,10 @@ void aarch64::getAArch64TargetFeatures(const Driver &D,
if (Arg *A = Args.getLastArg(options::OPT_mno_unaligned_access,
options::OPT_munaligned_access)) {
- if (A->getOption().matches(options::OPT_mno_unaligned_access)) {
+ if (A->getOption().matches(options::OPT_mno_unaligned_access))
Features.push_back("+strict-align");
- if (!ForAS)
- CmdArgs.push_back("-Wunaligned-access");
- }
- } else if (Triple.isOSOpenBSD()) {
+ } else if (Triple.isOSOpenBSD())
Features.push_back("+strict-align");
- if (!ForAS)
- CmdArgs.push_back("-Wunaligned-access");
- }
if (Args.hasArg(options::OPT_ffixed_x1))
Features.push_back("+reserve-x1");
diff --git a/clang/lib/Driver/ToolChains/Arch/AArch64.h b/clang/lib/Driver/ToolChains/Arch/AArch64.h
index 0cdc2ec725e02..d47c402d4a42d 100644
--- a/clang/lib/Driver/ToolChains/Arch/AArch64.h
+++ b/clang/lib/Driver/ToolChains/Arch/AArch64.h
@@ -22,7 +22,6 @@ namespace aarch64 {
void getAArch64TargetFeatures(const Driver &D, const llvm::Triple &Triple,
const llvm::opt::ArgList &Args,
- llvm::opt::ArgStringList &CmdArgs,
std::vector<llvm::StringRef> &Features,
bool ForAS);
diff --git a/clang/lib/Driver/ToolChains/Arch/ARM.cpp b/clang/lib/Driver/ToolChains/Arch/ARM.cpp
index 1055d7800b63e..4013cf230026b 100644
--- a/clang/lib/Driver/ToolChains/Arch/ARM.cpp
+++ b/clang/lib/Driver/ToolChains/Arch/ARM.cpp
@@ -769,12 +769,10 @@ void arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple,
}
// Kernel code has more strict alignment requirements.
- if (KernelOrKext) {
+ if (KernelOrKext)
Features.push_back("+strict-align");
- if (!ForAS)
- CmdArgs.push_back("-Wunaligned-access");
- } else if (Arg *A = Args.getLastArg(options::OPT_mno_unaligned_access,
- options::OPT_munaligned_access)) {
+ else if (Arg *A = Args.getLastArg(options::OPT_mno_unaligned_access,
+ options::OPT_munaligned_access)) {
if (A->getOption().matches(options::OPT_munaligned_access)) {
// No v6M core supports unaligned memory access (v6M ARM ARM A3.2).
if (Triple.getSubArch() == llvm::Triple::SubArchType::ARMSubArch_v6m)
@@ -783,11 +781,8 @@ void arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple,
// access either.
else if (Triple.getSubArch() == llvm::Triple::SubArchType::ARMSubArch_v8m_baseline)
D.Diag(diag::err_target_unsupported_unaligned) << "v8m.base";
- } else {
+ } else
Features.push_back("+strict-align");
- if (!ForAS)
- CmdArgs.push_back("-Wunaligned-access");
- }
} else {
// Assume pre-ARMv6 doesn't support unaligned accesses.
//
@@ -806,23 +801,14 @@ void arm::getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple,
int VersionNum = getARMSubArchVersionNumber(Triple);
if (Triple.isOSDarwin() || Triple.isOSNetBSD()) {
if (VersionNum < 6 ||
- Triple.getSubArch() == llvm::Triple::SubArchType::ARMSubArch_v6m) {
+ Triple.getSubArch() == llvm::Triple::SubArchType::ARMSubArch_v6m)
Features.push_back("+strict-align");
- if (!ForAS)
- CmdArgs.push_back("-Wunaligned-access");
- }
} else if (Triple.isOSLinux() || Triple.isOSNaCl() ||
Triple.isOSWindows()) {
- if (VersionNum < 7) {
+ if (VersionNum < 7)
Features.push_back("+strict-align");
- if (!ForAS)
- CmdArgs.push_back("-Wunaligned-access");
- }
- } else {
+ } else
Features.push_back("+strict-align");
- if (!ForAS)
- CmdArgs.push_back("-Wunaligned-access");
- }
}
// llvm does not support reserving registers in general. There is support
diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp
index 5f4e6cb6dc496..d4afefcb24a98 100644
--- a/clang/lib/Driver/ToolChains/Clang.cpp
+++ b/clang/lib/Driver/ToolChains/Clang.cpp
@@ -346,8 +346,7 @@ static void getTargetFeatures(const Driver &D, const llvm::Triple &Triple,
case llvm::Triple::aarch64:
case llvm::Triple::aarch64_32:
case llvm::Triple::aarch64_be:
- aarch64::getAArch64TargetFeatures(D, Triple, Args, CmdArgs, Features,
- ForAS);
+ aarch64::getAArch64TargetFeatures(D, Triple, Args, Features, ForAS);
break;
case llvm::Triple::x86:
case llvm::Triple::x86_64:
diff --git a/clang/test/Sema/test-wunaligned-access.c b/clang/test/Sema/test-wunaligned-access.c
deleted file mode 100644
index 092345e85874b..0000000000000
--- a/clang/test/Sema/test-wunaligned-access.c
+++ /dev/null
@@ -1,476 +0,0 @@
-// RUN: %clang_cc1 %s -verify -fsyntax-only -Wunaligned-access
-// expected-no-diagnostics
-// Set 1
-struct T1 {
- char a;
- int b;
-};
-
-struct __attribute__((packed)) U1 {
- char a;
- struct T1 b;
- int c;
-};
-
-struct __attribute__((packed)) U2 {
- char a;
- struct T1 b __attribute__((aligned(2)));
- int c;
-};
-
-struct __attribute__((packed)) U3 {
- char a;
- struct T1 b __attribute__((aligned(4)));
- int c;
-};
-
-struct __attribute__((aligned(2))) U4 {
- char a;
- struct T1 b;
- int c;
-};
-
-struct U5 {
- char a;
- struct T1 b;
- int c;
-};
-
-struct U6 {
- char a;
- int b;
- struct T1 c __attribute__((aligned(2)));
-};
-
-struct __attribute__((packed)) U7 {
- short a;
- short b;
- char c;
- struct T1 d;
-};
-
-struct U8 {
- short a;
- short b;
- char c;
- struct T1 d;
-};
-
-struct __attribute__((packed)) U9 {
- short a;
- short b;
- char c;
- struct T1 d __attribute__((aligned(4)));
-};
-
-struct __attribute__((packed)) U10 {
- short a;
- short b;
- char c;
- struct T1 d __attribute__((aligned(2)));
-};
-
-struct __attribute__((aligned(2))) U11 {
- short a;
- short b;
- char c;
- struct T1 d;
-};
-
-// Set 2
-#pragma pack(push, 1)
-
-struct U12 {
- char a;
- struct T1 b;
- int c;
-};
-
-struct __attribute__((packed)) U13 {
- char a;
- struct T1 b;
- int c;
-};
-
-struct __attribute__((packed)) U14 {
- char a;
- struct T1 b __attribute__((aligned(4)));
- int c;
-};
-
-struct __attribute__((aligned(2))) U15 {
- char a;
- struct T1 b;
- int c;
-};
-
-struct U16 {
- char a;
- char b;
- short c;
- struct T1 d;
-};
-
-struct U17 {
- char a;
- char b;
- short c;
- struct T1 d __attribute__((aligned(4)));
-};
-
-struct __attribute__((packed)) U18 {
- char a;
- short b;
- struct T1 c __attribute__((aligned(4)));
-};
-
-struct __attribute__((aligned(4))) U19 {
- char a;
- struct T1 b;
- int c;
-};
-
-struct __attribute__((aligned(4))) U20 {
- char a[4];
- struct T1 b;
- int c;
-};
-
-struct U21 {
- char a;
- short c;
- struct T1 d;
-};
-
-struct U22 {
- char a;
- short c;
- struct T1 d __attribute__((aligned(4)));
-};
-
-#pragma pack(pop)
-
-// Set 3
-
-struct __attribute__((packed)) U23 {
- char a;
- struct T1 b;
- int c;
-};
-
-struct U24 {
- char a;
- struct T1 b;
- int c;
-};
-
-struct U25 {
- char a;
- char b;
- short c;
- struct T1 d;
-};
-
-#pragma pack(push, 1)
-
-struct U26 {
- char a;
- char b;
- short c;
- struct T1 d;
-};
-
-#pragma pack(pop)
-
-// Set 4
-
-struct __attribute__((packed)) T2 {
- char a;
- struct T1 b;
-};
-
-struct T3 {
- char a;
- struct T1 b;
-};
-
-struct __attribute__((packed)) U27 {
- char a;
- struct T2 b;
- int c;
-};
-
-struct U28 {
- char a;
- char _p[2];
- struct T2 b;
- int c;
-};
-
-struct U29 {
- char a;
- struct T3 b;
- int c;
-};
-
-struct __attribute__((packed)) U30 {
- char a;
- struct T3 b;
- int c;
-};
-
-struct __attribute__((packed)) U31 {
- char a;
- struct T2 b __attribute__((aligned(4)));
-};
-
-struct __attribute__((packed)) U32 {
- char a;
- char b;
- char c;
- char d;
- struct T3 e;
-};
-
-struct __attribute__((packed)) U33 {
- char a;
- char b;
- char c;
- char d;
- struct T2 e __attribute__((aligned(4)));
-};
-
-struct __attribute__((packed)) U34 {
- char a;
- struct T1 b __attribute__((packed));
- struct T2 c;
-};
-
-struct __attribute__((packed)) U35 {
- char a;
- struct T4 {
- char b;
- struct T1 c;
- } d;
-};
-
-// Set 5
-
-#pragma pack(push, 1)
-struct T5 {
- char a;
- struct T1 b;
-};
-#pragma pack(pop)
-
-#pragma pack(push, 1)
-struct U36 {
- char a;
- struct T5 b;
- int c;
-};
-
-struct U37 {
- char a;
- struct T3 b;
- int c;
-};
-#pragma pack(pop)
-struct U38 {
- char a;
- struct T5 b __attribute__((aligned(4)));
- int c;
-};
-
-struct U39 {
- char a;
-#pragma pack(push, 4)
- struct T5 b;
-#pragma pack(pop)
- int c;
-};
-
-// Set 6
-
-struct __attribute__((packed)) A1 {
- char a;
- struct T1 b;
-};
-
-struct A2 {
- char a;
- struct T1 b;
-};
-
-struct __attribute__((packed)) A3 {
- char a;
- struct T1 b __attribute__((aligned(4)));
-};
-
-#pragma pack(push, 1)
-struct A4 {
- char a;
- struct T1 b;
-};
-
-struct A5 {
- char a;
- struct T1 b __attribute__((aligned(4)));
-};
-#pragma pack(pop)
-
-struct __attribute__((packed)) A6 {
- struct T1 a;
-};
-
-struct A7 {
- char a;
- struct T1 b __attribute__((packed));
-};
-
-struct A8 {
- char a;
- char b;
- short c;
- struct T1 d;
-};
-
-struct A9 {
- char a;
- struct T2 b;
-};
-
-struct A10 {
- char a;
- struct T2 b __attribute__((aligned(4)));
-};
-
-struct __attribute__((packed)) A11 {
- char a;
- struct T2 b;
-};
-
-struct __attribute__((packed)) U40 {
- char a;
- struct A1 b;
- int c;
-};
-
-struct __attribute__((packed)) U41 {
- char a;
- struct A3 b;
- int c;
-};
-
-#pragma pack(push, 1)
-struct U42 {
- char a;
- struct A1 b;
- int c;
-};
-#pragma pack(pop)
-
-struct __attribute__((packed)) U43 {
- char a;
- struct A9 b;
- int c;
-};
-
-struct __attribute__((packed)) U44 {
- char a;
- struct A10 b;
- int c;
-};
-
-#pragma pack(push, 1)
-
-struct U45 {
- char a;
- struct A10 b;
- int c;
-};
-
-#pragma pack(pop)
-
-struct __attribute__((packed)) U46 {
- char a;
- struct A2 b;
- int c;
-};
-
-struct __attribute__((packed)) U47 {
- char a;
- struct A8 b;
- int c;
-};
-
-#pragma pack(push, 1)
-struct U48 {
- char a;
- struct A8 b;
- int c;
-};
-#pragma pack(pop)
-
-struct U49 {
- char a;
- struct A11 b;
- int c;
-};
-
-struct U50 {
- char a;
- struct A1 b;
- int c;
-};
-
-struct U1 s1;
-struct U2 s2;
-struct U3 s3;
-struct U4 s4;
-struct U5 s5;
-struct U6 s6;
-struct U7 s7;
-struct U8 s8;
-struct U9 s9;
-struct U10 s10;
-struct U11 s11;
-struct U12 s12;
-struct U13 s13;
-struct U14 s14;
-struct U15 s15;
-struct U16 s16;
-struct U17 s17;
-struct U18 s18;
-struct U19 s19;
-struct U20 s20;
-struct U21 s21;
-struct U22 s22;
-struct U23 s23;
-struct U24 s24;
-struct U25 s25;
-struct U26 s26;
-struct U27 s27;
-struct U28 s28;
-struct U29 s29;
-struct U30 s30;
-struct U31 s31;
-struct U32 s32;
-struct U33 s33;
-struct U34 s34;
-struct U35 s35;
-struct U36 s36;
-struct U37 s37;
-struct U38 s38;
-struct U39 s39;
-struct U40 s40;
-struct U41 s41;
-struct U42 s42;
-struct U43 s43;
-struct U44 s44;
-struct U45 s45;
-struct U46 s46;
-struct U47 s47;
-struct U48 s48;
-struct U49 s49;
-struct U50 s50;
diff --git a/clang/test/Sema/test-wunaligned-access.cpp b/clang/test/Sema/test-wunaligned-access.cpp
deleted file mode 100644
index 0a8f7ee3c5c05..0000000000000
--- a/clang/test/Sema/test-wunaligned-access.cpp
+++ /dev/null
@@ -1,285 +0,0 @@
-// RUN: %clang_cc1 %s -verify -fsyntax-only -Wunaligned-access
-
-// Packed-Unpacked Tests (No Pragma)
-
-struct T1 {
- char a;
- int b;
-};
-
-struct __attribute__((packed)) U1 // Causes warning
-{
- char a;
- T1 b; // expected-warning {{field b within its parent 'U1' has an alignment greater than its parent this may be caused by 'U1' being packed and can lead to unaligned accesses}}
- int c;
-};
-
-struct __attribute__((packed)) U2 // No warning
-{
- char a;
- T1 b __attribute__((aligned(4)));
- int c;
-};
-
-struct __attribute__((packed)) U3 // No warning
-{
- char a;
- char b;
- short c;
- T1 d;
-};
-
-struct __attribute__((packed)) U4 // No warning
-{
- T1 a;
- int b;
-};
-
-struct __attribute__((aligned(4), packed)) U5 // Causes warning
-{
- char a;
- T1 b; // expected-warning {{field b within its parent 'U5' has an alignment greater than its parent this may be caused by 'U5' being packed and can lead to unaligned accesses}}
- int c;
-};
-
-struct __attribute__((aligned(4), packed)) U6 // No warning
-{
- char a;
- char b;
- short c;
- T1 d;
-};
-
-// Packed-Unpacked Tests with Pragma
-
-#pragma pack(push, 1)
-
-struct __attribute__((packed)) U7 // Causes warning
-{
- char a;
- T1 b; // expected-warning {{field b within its parent 'U7' has an alignment greater than its parent this may be caused by 'U7' being packed and can lead to unaligned accesses}}
- int c;
-};
-
-struct __attribute__((packed)) U8 {
- char a;
- T1 b __attribute__((aligned(4))); // expected-warning {{field b within its parent 'U8' has an alignment greater than its parent this may be caused by 'U8' being packed and can lead to unaligned accesses}}
- int c;
-};
-
-struct __attribute__((aligned(4))) U9 {
- char a;
- T1 b; // expected-warning {{field b within its parent 'U9' has an alignment greater than its parent this may be caused by 'U9' being packed and can lead to unaligned accesses}}
- int c;
-};
-
-struct U10 {
- char a;
- T1 b; // expected-warning {{field b within its parent 'U10' has an alignment greater than its parent this may be caused by 'U10' being packed and can lead to unaligned accesses}}
- int c;
-};
-
-#pragma pack(pop)
-
-// Packed-Packed Tests
-
-struct __attribute__((packed)) T2 {
- char a;
- int b;
-};
-
-struct __attribute__((packed)) U11 {
- char a;
- T2 b;
- int c;
-};
-
-#pragma pack(push, 1)
-struct U12 // No warning
-{
- char a;
- T2 b;
- int c;
-};
-#pragma pack(pop)
-
-// Unpacked-Packed Tests
-
-struct U13 // No warning
-{
- char a;
- T2 b;
- int c;
-};
-
-struct U14 // No warning
-{
- char a;
- T2 b __attribute__((aligned(4)));
- int c;
-};
-
-// Unpacked-Unpacked Test
-
-struct T3 {
- char a;
- int b;
-};
-
-struct U15 // No warning
-{
- char a;
- T3 b;
- int c;
-};
-
-// Packed-Packed-Unpacked Test (No pragma)
-
-struct __attribute__((packed)) A1 {
- char a;
- T1 b; // expected-warning {{field b within its parent 'A1' has an alignment greater than its parent this may be caused by 'A1' being packed and can lead to unaligned accesses}}
-};
-
-struct __attribute__((packed)) U16 // No warning
-{
- char a;
- A1 b;
- int c;
-};
-
-struct __attribute__((packed)) A2 // No warning
-{
- char a;
- T1 b __attribute__((aligned(4)));
-};
-
-struct __attribute__((packed)) U17 // Caused warning
-{
- char a;
- A2 b; // expected-warning {{field b within its parent 'U17' has an alignment greater than its parent this may be caused by 'U17' being packed and can lead to unaligned accesses}}
- int c;
-};
-
-// Packed-Unpacked-Packed tests
-
-struct A3 {
- char a;
- T2 b;
-};
-
-struct __attribute__((packed)) U18 {
- char a;
- A3 b;
- int c;
-};
-
-struct A4 {
- char a;
- T2 b;
- int c;
-};
-
-#pragma pack(push, 1)
-struct U19 // Caused warning
-{
- char a;
- A4 b; // expected-warning {{field b within its parent 'U19' has an alignment greater than its parent this may be caused by 'U19' being packed and can lead to unaligned accesses}}
- int c;
-};
-#pragma pack(pop)
-
-// Packed-Unpacked-Unpacked tests
-
-struct A5 {
- char a;
- T1 b;
-};
-
-struct __attribute__((packed)) U20 // Caused warning
-{
- char a;
- A5 b; // expected-warning {{field b within its parent 'U20' has an alignment greater than its parent this may be caused by 'U20' being packed and can lead to unaligned accesses}}
- int c;
-};
-
-struct A6 {
- char a;
- T1 b;
-};
-
-#pragma pack(push, 1)
-struct U21 // Caused warning
-{
- char a;
- A6 b; // expected-warning {{field b within its parent 'U21' has an alignment greater than its parent this may be caused by 'U21' being packed and can lead to unaligned accesses}}
- int c;
-};
-#pragma pack(pop)
-
-// Unpacked-Packed-Packed test
-
-struct __attribute__((packed)) A7 // No warning
-{
- char a;
- T2 b;
-};
-
-struct U22 // No warning
-{
- char a;
- A7 b;
- int c;
-};
-
-// Unpacked-Packed-Unpacked tests
-
-struct __attribute__((packed)) A8 // Should cause warning
-{
- char a;
- T1 b; // expected-warning {{field b within its parent 'A8' has an alignment greater than its parent this may be caused by 'A8' being packed and can lead to unaligned accesses}}
-};
-
-struct U23 // No warning
-{
- char a;
- A8 b;
- int c;
-};
-
-struct __attribute__((packed)) A9 // No warning
-{
- char a;
- T1 b __attribute__((aligned(4)));
-};
-
-struct U24 // No warning
-{
- char a;
- A9 b;
- int c;
-};
-
-struct U1 s1;
-struct U2 s2;
-struct U3 s3;
-struct U4 s4;
-struct U5 s5;
-struct U6 s6;
-struct U7 s7;
-struct U8 s8;
-struct U9 s9;
-struct U10 s10;
-struct U11 s11;
-struct U12 s12;
-struct U13 s13;
-struct U14 s14;
-struct U15 s15;
-struct U16 s16;
-struct U17 s17;
-struct U18 s18;
-struct U19 s19;
-struct U20 s20;
-struct U21 s21;
-struct U22 s22;
-struct U23 s23;
-struct U24 s24;
\ No newline at end of file
More information about the cfe-commits
mailing list