-
Notifications
You must be signed in to change notification settings - Fork 10.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[clang] Separate bit-field padding diagnostics into -Wpadded-bitfield (…
…#70978) The `-Wpadded` diagnostics are usually very noisy and generally not helpful. However, reporting padding that was introduced in bit-fields is rather helpful. For example, yesterday in SerenityOS's discord we had very unpleasant experience of debugging Windows portability issue, and its root cause was that under `x86_64-pc-windows-msvc` a padding was introduced for one of the bit-fields. So, this PR separates bit-field-related padding diagnostics into a new `-Wpadded-bitfield`. The diagnostic group is also enabled by `-Wpadded` for compatibility reasons.
- Loading branch information
1 parent
8f59c16
commit 43feb3e
Showing
5 changed files
with
67 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
4 changes: 2 additions & 2 deletions
4
clang/test/CodeGenCXX/warn-all-padded-packed-packed-non-pod.cpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
// RUN: %clang_cc1 -triple=x86_64-none-none -Wpadded-bitfield -verify=expected %s -emit-llvm-only | ||
|
||
struct S1 { | ||
unsigned a : 1; | ||
unsigned long long : 0; // expected-warning {{padding struct 'S1' with 63 bits to align anonymous bit-field}} | ||
}; | ||
|
||
struct S2 { | ||
unsigned a : 1; | ||
unsigned long long b : 64; // expected-warning {{padding struct 'S2' with 63 bits to align 'b'}} | ||
}; | ||
|
||
struct S3 { | ||
char a : 1; | ||
short b : 16; // expected-warning {{padding struct 'S3' with 15 bits to align 'b'}} | ||
}; | ||
|
||
struct [[gnu::packed]] S4 { | ||
char a : 1; | ||
short b : 16; | ||
}; | ||
|
||
struct S5 { | ||
unsigned a : 1; | ||
unsigned long long b : 63; | ||
}; | ||
|
||
struct S6 { | ||
unsigned a : 1; | ||
unsigned long long b; | ||
}; | ||
|
||
struct S7 { | ||
int word; | ||
struct { | ||
int filler __attribute__ ((aligned (8))); | ||
}; | ||
}; | ||
|
||
// The warnings are emitted when the layout of the structs is computed, so we have to use them. | ||
void f(S1, S2, S3, S4, S5, S6, S7){} |