Skip to content

Commit d906ac5

Browse files
authored
[clang][AVR] Fix basic type size/alignment values to match avr-gcc. (#111290)
Closes #102172
1 parent 95b4128 commit d906ac5

File tree

7 files changed

+109
-57
lines changed

7 files changed

+109
-57
lines changed

clang/include/clang/Basic/TargetInfo.h

+5-7
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ enum class FloatModeKind {
8787
struct TransferrableTargetInfo {
8888
unsigned char PointerWidth, PointerAlign;
8989
unsigned char BoolWidth, BoolAlign;
90+
unsigned char ShortWidth, ShortAlign;
9091
unsigned char IntWidth, IntAlign;
9192
unsigned char HalfWidth, HalfAlign;
9293
unsigned char BFloat16Width, BFloat16Align;
@@ -497,13 +498,10 @@ class TargetInfo : public TransferrableTargetInfo,
497498
unsigned getCharWidth() const { return 8; } // FIXME
498499
unsigned getCharAlign() const { return 8; } // FIXME
499500

500-
/// Return the size of 'signed short' and 'unsigned short' for this
501-
/// target, in bits.
502-
unsigned getShortWidth() const { return 16; } // FIXME
503-
504-
/// Return the alignment of 'signed short' and 'unsigned short' for
505-
/// this target.
506-
unsigned getShortAlign() const { return 16; } // FIXME
501+
/// getShortWidth/Align - Return the size of 'signed short' and
502+
/// 'unsigned short' for this target, in bits.
503+
unsigned getShortWidth() const { return ShortWidth; }
504+
unsigned getShortAlign() const { return ShortAlign; }
507505

508506
/// getIntWidth/Align - Return the size of 'signed int' and 'unsigned int' for
509507
/// this target, in bits.

clang/lib/Basic/TargetInfo.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ TargetInfo::TargetInfo(const llvm::Triple &T) : Triple(T) {
7070
HasStrictFP = false;
7171
PointerWidth = PointerAlign = 32;
7272
BoolWidth = BoolAlign = 8;
73+
ShortWidth = ShortAlign = 16;
7374
IntWidth = IntAlign = 32;
7475
LongWidth = LongAlign = 32;
7576
LongLongWidth = LongLongAlign = 64;
@@ -437,6 +438,7 @@ void TargetInfo::adjust(DiagnosticsEngine &Diags, LangOptions &Opts) {
437438
// what these normally are for the target.
438439
// We also define long long and long double here, although the
439440
// OpenCL standard only mentions these as "reserved".
441+
ShortWidth = ShortAlign = 16;
440442
IntWidth = IntAlign = 32;
441443
LongWidth = LongAlign = 64;
442444
LongLongWidth = LongLongAlign = 128;

clang/lib/Basic/Targets/AVR.h

+4
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ class LLVM_LIBRARY_VISIBILITY AVRTargetInfo : public TargetInfo {
2929
TLSSupported = false;
3030
PointerWidth = 16;
3131
PointerAlign = 8;
32+
ShortWidth = 16;
33+
ShortAlign = 8;
3234
IntWidth = 16;
3335
IntAlign = 8;
3436
LongWidth = 32;
@@ -65,6 +67,8 @@ class LLVM_LIBRARY_VISIBILITY AVRTargetInfo : public TargetInfo {
6567
return std::nullopt;
6668
}
6769

70+
bool allowsLargerPreferedTypeAlignment() const override { return false; }
71+
6872
BuiltinVaListKind getBuiltinVaListKind() const override {
6973
return TargetInfo::VoidPtrBuiltinVaList;
7074
}

clang/test/CodeGen/cx-complex-range.c

+40-40
Original file line numberDiff line numberDiff line change
@@ -1264,24 +1264,24 @@ _Complex float mulf(_Complex float a, _Complex float b) {
12641264
// AVRFP32-SAME: float noundef [[A_COERCE0:%.*]], float noundef [[A_COERCE1:%.*]], float noundef [[B_COERCE0:%.*]], float noundef [[B_COERCE1:%.*]]) addrspace(1) #[[ATTR0]] {
12651265
// AVRFP32-NEXT: entry:
12661266
// AVRFP32-NEXT: [[RETVAL:%.*]] = alloca { float, float }, align 1
1267-
// AVRFP32-NEXT: [[A:%.*]] = alloca { float, float }, align 4
1268-
// AVRFP32-NEXT: [[B:%.*]] = alloca { float, float }, align 4
1267+
// AVRFP32-NEXT: [[A:%.*]] = alloca { float, float }, align 1
1268+
// AVRFP32-NEXT: [[B:%.*]] = alloca { float, float }, align 1
12691269
// AVRFP32-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[A]], i32 0, i32 0
1270-
// AVRFP32-NEXT: store float [[A_COERCE0]], ptr [[TMP0]], align 4
1270+
// AVRFP32-NEXT: store float [[A_COERCE0]], ptr [[TMP0]], align 1
12711271
// AVRFP32-NEXT: [[TMP1:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[A]], i32 0, i32 1
1272-
// AVRFP32-NEXT: store float [[A_COERCE1]], ptr [[TMP1]], align 4
1272+
// AVRFP32-NEXT: store float [[A_COERCE1]], ptr [[TMP1]], align 1
12731273
// AVRFP32-NEXT: [[TMP2:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[B]], i32 0, i32 0
1274-
// AVRFP32-NEXT: store float [[B_COERCE0]], ptr [[TMP2]], align 4
1274+
// AVRFP32-NEXT: store float [[B_COERCE0]], ptr [[TMP2]], align 1
12751275
// AVRFP32-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[B]], i32 0, i32 1
1276-
// AVRFP32-NEXT: store float [[B_COERCE1]], ptr [[TMP3]], align 4
1276+
// AVRFP32-NEXT: store float [[B_COERCE1]], ptr [[TMP3]], align 1
12771277
// AVRFP32-NEXT: [[A_REALP:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[A]], i32 0, i32 0
1278-
// AVRFP32-NEXT: [[A_REAL:%.*]] = load float, ptr [[A_REALP]], align 4
1278+
// AVRFP32-NEXT: [[A_REAL:%.*]] = load float, ptr [[A_REALP]], align 1
12791279
// AVRFP32-NEXT: [[A_IMAGP:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[A]], i32 0, i32 1
1280-
// AVRFP32-NEXT: [[A_IMAG:%.*]] = load float, ptr [[A_IMAGP]], align 4
1280+
// AVRFP32-NEXT: [[A_IMAG:%.*]] = load float, ptr [[A_IMAGP]], align 1
12811281
// AVRFP32-NEXT: [[B_REALP:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[B]], i32 0, i32 0
1282-
// AVRFP32-NEXT: [[B_REAL:%.*]] = load float, ptr [[B_REALP]], align 4
1282+
// AVRFP32-NEXT: [[B_REAL:%.*]] = load float, ptr [[B_REALP]], align 1
12831283
// AVRFP32-NEXT: [[B_IMAGP:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[B]], i32 0, i32 1
1284-
// AVRFP32-NEXT: [[B_IMAG:%.*]] = load float, ptr [[B_IMAGP]], align 4
1284+
// AVRFP32-NEXT: [[B_IMAG:%.*]] = load float, ptr [[B_IMAGP]], align 1
12851285
// AVRFP32-NEXT: [[TMP4:%.*]] = call addrspace(1) float @llvm.fabs.f32(float [[B_REAL]])
12861286
// AVRFP32-NEXT: [[TMP5:%.*]] = call addrspace(1) float @llvm.fabs.f32(float [[B_IMAG]])
12871287
// AVRFP32-NEXT: [[ABS_CMP:%.*]] = fcmp ugt float [[TMP4]], [[TMP5]]
@@ -1321,24 +1321,24 @@ _Complex float mulf(_Complex float a, _Complex float b) {
13211321
// AVRFP64-LABEL: define dso_local void @divd(
13221322
// AVRFP64-SAME: ptr dead_on_unwind noalias writable sret({ double, double }) align 1 [[AGG_RESULT:%.*]], double noundef [[A_COERCE0:%.*]], double noundef [[A_COERCE1:%.*]], double noundef [[B_COERCE0:%.*]], double noundef [[B_COERCE1:%.*]]) addrspace(1) #[[ATTR0]] {
13231323
// AVRFP64-NEXT: entry:
1324-
// AVRFP64-NEXT: [[A:%.*]] = alloca { double, double }, align 8
1325-
// AVRFP64-NEXT: [[B:%.*]] = alloca { double, double }, align 8
1324+
// AVRFP64-NEXT: [[A:%.*]] = alloca { double, double }, align 1
1325+
// AVRFP64-NEXT: [[B:%.*]] = alloca { double, double }, align 1
13261326
// AVRFP64-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[A]], i32 0, i32 0
1327-
// AVRFP64-NEXT: store double [[A_COERCE0]], ptr [[TMP0]], align 8
1327+
// AVRFP64-NEXT: store double [[A_COERCE0]], ptr [[TMP0]], align 1
13281328
// AVRFP64-NEXT: [[TMP1:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[A]], i32 0, i32 1
1329-
// AVRFP64-NEXT: store double [[A_COERCE1]], ptr [[TMP1]], align 8
1329+
// AVRFP64-NEXT: store double [[A_COERCE1]], ptr [[TMP1]], align 1
13301330
// AVRFP64-NEXT: [[TMP2:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[B]], i32 0, i32 0
1331-
// AVRFP64-NEXT: store double [[B_COERCE0]], ptr [[TMP2]], align 8
1331+
// AVRFP64-NEXT: store double [[B_COERCE0]], ptr [[TMP2]], align 1
13321332
// AVRFP64-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[B]], i32 0, i32 1
1333-
// AVRFP64-NEXT: store double [[B_COERCE1]], ptr [[TMP3]], align 8
1333+
// AVRFP64-NEXT: store double [[B_COERCE1]], ptr [[TMP3]], align 1
13341334
// AVRFP64-NEXT: [[A_REALP:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[A]], i32 0, i32 0
1335-
// AVRFP64-NEXT: [[A_REAL:%.*]] = load double, ptr [[A_REALP]], align 8
1335+
// AVRFP64-NEXT: [[A_REAL:%.*]] = load double, ptr [[A_REALP]], align 1
13361336
// AVRFP64-NEXT: [[A_IMAGP:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[A]], i32 0, i32 1
1337-
// AVRFP64-NEXT: [[A_IMAG:%.*]] = load double, ptr [[A_IMAGP]], align 8
1337+
// AVRFP64-NEXT: [[A_IMAG:%.*]] = load double, ptr [[A_IMAGP]], align 1
13381338
// AVRFP64-NEXT: [[B_REALP:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[B]], i32 0, i32 0
1339-
// AVRFP64-NEXT: [[B_REAL:%.*]] = load double, ptr [[B_REALP]], align 8
1339+
// AVRFP64-NEXT: [[B_REAL:%.*]] = load double, ptr [[B_REALP]], align 1
13401340
// AVRFP64-NEXT: [[B_IMAGP:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[B]], i32 0, i32 1
1341-
// AVRFP64-NEXT: [[B_IMAG:%.*]] = load double, ptr [[B_IMAGP]], align 8
1341+
// AVRFP64-NEXT: [[B_IMAG:%.*]] = load double, ptr [[B_IMAGP]], align 1
13421342
// AVRFP64-NEXT: [[TMP4:%.*]] = call addrspace(1) double @llvm.fabs.f64(double [[B_REAL]])
13431343
// AVRFP64-NEXT: [[TMP5:%.*]] = call addrspace(1) double @llvm.fabs.f64(double [[B_IMAG]])
13441344
// AVRFP64-NEXT: [[ABS_CMP:%.*]] = fcmp ugt double [[TMP4]], [[TMP5]]
@@ -1862,24 +1862,24 @@ _Complex double divd(_Complex double a, _Complex double b) {
18621862
// AVRFP32-SAME: float noundef [[A_COERCE0:%.*]], float noundef [[A_COERCE1:%.*]], float noundef [[B_COERCE0:%.*]], float noundef [[B_COERCE1:%.*]]) addrspace(1) #[[ATTR0]] {
18631863
// AVRFP32-NEXT: entry:
18641864
// AVRFP32-NEXT: [[RETVAL:%.*]] = alloca { float, float }, align 1
1865-
// AVRFP32-NEXT: [[A:%.*]] = alloca { float, float }, align 4
1866-
// AVRFP32-NEXT: [[B:%.*]] = alloca { float, float }, align 4
1865+
// AVRFP32-NEXT: [[A:%.*]] = alloca { float, float }, align 1
1866+
// AVRFP32-NEXT: [[B:%.*]] = alloca { float, float }, align 1
18671867
// AVRFP32-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[A]], i32 0, i32 0
1868-
// AVRFP32-NEXT: store float [[A_COERCE0]], ptr [[TMP0]], align 4
1868+
// AVRFP32-NEXT: store float [[A_COERCE0]], ptr [[TMP0]], align 1
18691869
// AVRFP32-NEXT: [[TMP1:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[A]], i32 0, i32 1
1870-
// AVRFP32-NEXT: store float [[A_COERCE1]], ptr [[TMP1]], align 4
1870+
// AVRFP32-NEXT: store float [[A_COERCE1]], ptr [[TMP1]], align 1
18711871
// AVRFP32-NEXT: [[TMP2:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[B]], i32 0, i32 0
1872-
// AVRFP32-NEXT: store float [[B_COERCE0]], ptr [[TMP2]], align 4
1872+
// AVRFP32-NEXT: store float [[B_COERCE0]], ptr [[TMP2]], align 1
18731873
// AVRFP32-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[B]], i32 0, i32 1
1874-
// AVRFP32-NEXT: store float [[B_COERCE1]], ptr [[TMP3]], align 4
1874+
// AVRFP32-NEXT: store float [[B_COERCE1]], ptr [[TMP3]], align 1
18751875
// AVRFP32-NEXT: [[A_REALP:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[A]], i32 0, i32 0
1876-
// AVRFP32-NEXT: [[A_REAL:%.*]] = load float, ptr [[A_REALP]], align 4
1876+
// AVRFP32-NEXT: [[A_REAL:%.*]] = load float, ptr [[A_REALP]], align 1
18771877
// AVRFP32-NEXT: [[A_IMAGP:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[A]], i32 0, i32 1
1878-
// AVRFP32-NEXT: [[A_IMAG:%.*]] = load float, ptr [[A_IMAGP]], align 4
1878+
// AVRFP32-NEXT: [[A_IMAG:%.*]] = load float, ptr [[A_IMAGP]], align 1
18791879
// AVRFP32-NEXT: [[B_REALP:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[B]], i32 0, i32 0
1880-
// AVRFP32-NEXT: [[B_REAL:%.*]] = load float, ptr [[B_REALP]], align 4
1880+
// AVRFP32-NEXT: [[B_REAL:%.*]] = load float, ptr [[B_REALP]], align 1
18811881
// AVRFP32-NEXT: [[B_IMAGP:%.*]] = getelementptr inbounds nuw { float, float }, ptr [[B]], i32 0, i32 1
1882-
// AVRFP32-NEXT: [[B_IMAG:%.*]] = load float, ptr [[B_IMAGP]], align 4
1882+
// AVRFP32-NEXT: [[B_IMAG:%.*]] = load float, ptr [[B_IMAGP]], align 1
18831883
// AVRFP32-NEXT: [[MUL_AC:%.*]] = fmul float [[A_REAL]], [[B_REAL]]
18841884
// AVRFP32-NEXT: [[MUL_BD:%.*]] = fmul float [[A_IMAG]], [[B_IMAG]]
18851885
// AVRFP32-NEXT: [[MUL_AD:%.*]] = fmul float [[A_REAL]], [[B_IMAG]]
@@ -1896,24 +1896,24 @@ _Complex double divd(_Complex double a, _Complex double b) {
18961896
// AVRFP64-LABEL: define dso_local void @muld(
18971897
// AVRFP64-SAME: ptr dead_on_unwind noalias writable sret({ double, double }) align 1 [[AGG_RESULT:%.*]], double noundef [[A_COERCE0:%.*]], double noundef [[A_COERCE1:%.*]], double noundef [[B_COERCE0:%.*]], double noundef [[B_COERCE1:%.*]]) addrspace(1) #[[ATTR0]] {
18981898
// AVRFP64-NEXT: entry:
1899-
// AVRFP64-NEXT: [[A:%.*]] = alloca { double, double }, align 8
1900-
// AVRFP64-NEXT: [[B:%.*]] = alloca { double, double }, align 8
1899+
// AVRFP64-NEXT: [[A:%.*]] = alloca { double, double }, align 1
1900+
// AVRFP64-NEXT: [[B:%.*]] = alloca { double, double }, align 1
19011901
// AVRFP64-NEXT: [[TMP0:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[A]], i32 0, i32 0
1902-
// AVRFP64-NEXT: store double [[A_COERCE0]], ptr [[TMP0]], align 8
1902+
// AVRFP64-NEXT: store double [[A_COERCE0]], ptr [[TMP0]], align 1
19031903
// AVRFP64-NEXT: [[TMP1:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[A]], i32 0, i32 1
1904-
// AVRFP64-NEXT: store double [[A_COERCE1]], ptr [[TMP1]], align 8
1904+
// AVRFP64-NEXT: store double [[A_COERCE1]], ptr [[TMP1]], align 1
19051905
// AVRFP64-NEXT: [[TMP2:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[B]], i32 0, i32 0
1906-
// AVRFP64-NEXT: store double [[B_COERCE0]], ptr [[TMP2]], align 8
1906+
// AVRFP64-NEXT: store double [[B_COERCE0]], ptr [[TMP2]], align 1
19071907
// AVRFP64-NEXT: [[TMP3:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[B]], i32 0, i32 1
1908-
// AVRFP64-NEXT: store double [[B_COERCE1]], ptr [[TMP3]], align 8
1908+
// AVRFP64-NEXT: store double [[B_COERCE1]], ptr [[TMP3]], align 1
19091909
// AVRFP64-NEXT: [[A_REALP:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[A]], i32 0, i32 0
1910-
// AVRFP64-NEXT: [[A_REAL:%.*]] = load double, ptr [[A_REALP]], align 8
1910+
// AVRFP64-NEXT: [[A_REAL:%.*]] = load double, ptr [[A_REALP]], align 1
19111911
// AVRFP64-NEXT: [[A_IMAGP:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[A]], i32 0, i32 1
1912-
// AVRFP64-NEXT: [[A_IMAG:%.*]] = load double, ptr [[A_IMAGP]], align 8
1912+
// AVRFP64-NEXT: [[A_IMAG:%.*]] = load double, ptr [[A_IMAGP]], align 1
19131913
// AVRFP64-NEXT: [[B_REALP:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[B]], i32 0, i32 0
1914-
// AVRFP64-NEXT: [[B_REAL:%.*]] = load double, ptr [[B_REALP]], align 8
1914+
// AVRFP64-NEXT: [[B_REAL:%.*]] = load double, ptr [[B_REALP]], align 1
19151915
// AVRFP64-NEXT: [[B_IMAGP:%.*]] = getelementptr inbounds nuw { double, double }, ptr [[B]], i32 0, i32 1
1916-
// AVRFP64-NEXT: [[B_IMAG:%.*]] = load double, ptr [[B_IMAGP]], align 8
1916+
// AVRFP64-NEXT: [[B_IMAG:%.*]] = load double, ptr [[B_IMAGP]], align 1
19171917
// AVRFP64-NEXT: [[MUL_AC:%.*]] = fmul double [[A_REAL]], [[B_REAL]]
19181918
// AVRFP64-NEXT: [[MUL_BD:%.*]] = fmul double [[A_IMAG]], [[B_IMAG]]
19191919
// AVRFP64-NEXT: [[MUL_AD:%.*]] = fmul double [[A_REAL]], [[B_IMAG]]

clang/test/CodeGen/mdouble.c

+2-3
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@
66
double x = 0;
77
int size = sizeof(x);
88

9-
// FIXME: the double should have an alignment of 1 on AVR, not 4 or 8.
10-
// AVR-FP64: @x ={{.*}} global double {{.*}}, align 8
9+
// AVR-FP64: @x ={{.*}} global double {{.*}}, align 1
1110
// AVR-FP64: @size ={{.*}} global i16 8
12-
// AVR-FP32: @x ={{.*}} global float {{.*}}, align 4
11+
// AVR-FP32: @x ={{.*}} global float {{.*}}, align 1
1312
// AVR-FP32: @size ={{.*}} global i16 4

clang/test/Sema/avr-size-align.c

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
// RUN: %clang_cc1 %s -triple avr -fsyntax-only
2+
3+
_Static_assert(sizeof(char) == 1, "sizeof(char) == 1");
4+
_Static_assert(_Alignof(char) == 1, "_Alignof(char) == 1");
5+
_Static_assert(__alignof(char) == 1, "__alignof(char) == 1");
6+
7+
_Static_assert(sizeof(short) == 2, "sizeof(short) == 2");
8+
_Static_assert(_Alignof(short) == 1, "_Alignof(short) == 1");
9+
_Static_assert(__alignof(short) == 1, "__alignof(short) == 1");
10+
11+
_Static_assert(sizeof(unsigned short) == 2, "sizeof(unsigned short) == 2");
12+
_Static_assert(_Alignof(unsigned short) == 1, "_Alignof(unsigned short) == 1");
13+
_Static_assert(__alignof(unsigned short) == 1, "__alignof(unsigned short) == 1");
14+
15+
_Static_assert(sizeof(int) == 2, "sizeof(int) == 2");
16+
_Static_assert(_Alignof(int) == 1, "_Alignof(int) == 1");
17+
_Static_assert(__alignof(int) == 1, "__alignof(int) == 1");
18+
19+
_Static_assert(sizeof(unsigned int) == 2, "sizeof(unsigned int) == 2");
20+
_Static_assert(_Alignof(unsigned int) == 1, "_Alignof(unsigned int) == 1");
21+
_Static_assert(__alignof(unsigned int) == 1, "__alignof(unsigned int) == 1");
22+
23+
_Static_assert(sizeof(long) == 4, "sizeof(long) == 4");
24+
_Static_assert(_Alignof(long) == 1, "_Alignof(long) == 1");
25+
_Static_assert(__alignof(long) == 1, "__alignof(long) == 1");
26+
27+
_Static_assert(sizeof(unsigned long) == 4, "sizeof(unsigned long) == 4");
28+
_Static_assert(_Alignof(unsigned long) == 1, "_Alignof(unsigned long) == 1");
29+
_Static_assert(__alignof(unsigned long) == 1, "__alignof(unsigned long) == 1");
30+
31+
_Static_assert(sizeof(long long) == 8, "sizeof(long long) == 8");
32+
_Static_assert(_Alignof(long long) == 1, "_Alignof(long long) == 1");
33+
_Static_assert(__alignof(long long) == 1, "__alignof(long long) == 1");
34+
35+
_Static_assert(sizeof(unsigned long long) == 8, "sizeof(unsigned long long) == 8");
36+
_Static_assert(_Alignof(unsigned long long) == 1, "_Alignof(unsigned long long) == 1");
37+
_Static_assert(__alignof(unsigned long long) == 1, "__alignof(unsigned long long) == 1");
38+
39+
_Static_assert(sizeof(float) == 4, "sizeof(float) == 4");
40+
_Static_assert(_Alignof(float) == 1, "_Alignof(float) == 1");
41+
_Static_assert(__alignof(float) == 1, "__alignof(float) == 1");
42+
43+
_Static_assert(sizeof(double) == 4, "sizeof(double) == 4");
44+
_Static_assert(_Alignof(double) == 1, "_Alignof(double) == 1");
45+
_Static_assert(__alignof(double) == 1, "__alignof(double) == 1");
46+
47+
_Static_assert(sizeof(long double) == 4, "sizeof(long double) == 4");
48+
_Static_assert(_Alignof(long double) == 1, "_Alignof(long double) == 1");
49+
_Static_assert(__alignof(long double) == 1, "__alignof(long double) == 1");

0 commit comments

Comments
 (0)