8000 gh-132868: use _Alignof() operator in the struct module · python/cpython@10eb674 · GitHub
[go: up one dir, main page]

Skip to content

Commit 10eb674

Original file line numberDiff line numberDiff line change
@@ -76,40 +76,6 @@ typedef struct {
7676
#define PyStructObject_CAST(op) ((PyStructObject *)(op))
7777
#define PyStruct_Check(op, state) PyObject_TypeCheck(op, (PyTypeObject *)(state)->PyStructType)
7878

79-
/* Define various structs to figure out the alignments of types */
80-
81-
82-
typedef struct { char c; short x; } st_short;
83-
typedef struct { char c; int x; } st_int;
84-
typedef struct { char c; long x; } st_long;
85-
typedef struct { char c; float x; } st_float;
86-
typedef struct { char c; double x; } st_double;
87-
#ifdef Py_HAVE_C_COMPLEX
88-
typedef struct { char c; float complex x; } st_float_complex;
89-
typedef struct { char c; double complex x; } st_double_complex;
90-
#endif
91-
typedef struct { char c; void *x; } st_void_p;
92-
typedef struct { char c; size_t x; } st_size_t;
93-
typedef struct { char c; _Bool x; } st_bool;
94-
95-
#define SHORT_ALIGN (sizeof(st_short) - sizeof(short))
96-
#define INT_ALIGN (sizeof(st_int) - sizeof(int))
97-
#define LONG_ALIGN (sizeof(st_long) - sizeof(long))
98-
#define FLOAT_ALIGN (sizeof(st_float) - sizeof(float))
99-
#define DOUBLE_ALIGN (sizeof(st_double) - sizeof(double))
100-
#ifdef Py_HAVE_C_COMPLEX
101-
# define FLOAT_COMPLEX_ALIGN (sizeof(st_float_complex) - sizeof(float complex))
102-
# define DOUBLE_COMPLEX_ALIGN (sizeof(st_double_complex) - sizeof(double complex))
103-
#endif
104-
#define VOID_P_ALIGN (sizeof(st_void_p) - sizeof(void *))
105-
#define SIZE_T_ALIGN (sizeof(st_size_t) - sizeof(size_t))
106-
#define BOOL_ALIGN (sizeof(st_bool) - sizeof(_Bool))
107-
108-
/* We can't support q and Q in native mode unless the compiler does;
109-
in std mode, they're 8 bytes on all platforms. */
110-
typedef struct { char c; long long x; } s_long_long;
111-
#define LONG_LONG_ALIGN (sizeof(s_long_long) - sizeof(long long))
112-
11379
#ifdef __powerc
11480
#pragma options align=reset
11581
#endif
@@ -898,28 +864,28 @@ static const formatdef native_table[] = {
898864
{'c', sizeof(char), 0, nu_char, np_char},
899865
{'s', sizeof(char), 0, NULL},
900866
{'p', sizeof(char), 0, NULL},
901-
{'h', sizeof(short), SHORT_ALIGN, nu_short, np_short},
902-
{'H', sizeof(short), SHORT_ALIGN, nu_ushort, np_ushort},
903-
{'i', sizeof(int), INT_ALIGN, nu_int, np_int},
904-
{'I', sizeof(int), INT_ALIGN, nu_uint, np_uint},
905-
{'l', sizeof(long), LONG_ALIGN, nu_long, np_long},
906-
{'L', sizeof(long), LONG_ALIGN, nu_ulong, np_ulong},
907-
{'n', sizeof(size_t), SIZE_T_ALIGN, nu_ssize_t, np_ssize_t},
908-
{'N', sizeof(size_t), SIZE_T_ALIGN, nu_size_t, np_size_t},
909-
{'q', sizeof(long long), LONG_LONG_ALIGN, nu_longlong, np_longlong},
910-
{'Q', sizeof(long long), LONG_LONG_ALIGN, nu_ulonglong,np_ulonglong},
911-
{'?', sizeof(_Bool), BOOL_ALIGN, nu_bool, np_bool},
912-
{'e', sizeof(short), SHORT_ALIGN, nu_halffloat, np_halffloat},
913-
{'f', sizeof(float), FLOAT_ALIGN, nu_float, np_float},
914-
{'d', sizeof(double), DOUBLE_ALIGN, nu_double, np_double},
867+
{'h', sizeof(short), _Alignof(short), nu_short, np_short},
868+
{'H', sizeof(short), _Alignof(short), nu_ushort, np_ushort},
869+
{'i', sizeof(int), _Alignof(int), nu_int, np_int},
870+
{'I', sizeof(int), _Alignof(int), nu_uint, np_uint},
871+
{'l', sizeof(long), _Alignof(long), nu_long, np_long},
872+
{'L', sizeof(long), _Alignof(long), nu_ulong, np_ulong},
873+
{'n', sizeof(size_t), _Alignof(size_t), nu_ssize_t, np_ssize_t},
874+
{'N', sizeof(size_t), _Alignof(size_t), nu_size_t, np_size_t},
875+
{'q', sizeof(long long), _Alignof(long long), nu_longlong, np_longlong},
876+
{'Q', sizeof(long long), _Alignof(long long), nu_ulonglong,np_ulonglong},
877+
{'?', sizeof(_Bool), _Alignof(_Bool), nu_bool, np_bool},
878+
{'e', sizeof(short), _Alignof(short), nu_halffloat, np_halffloat},
879+
{'f', sizeof(float), _Alignof(float), nu_float, np_float},
880+
{'d', sizeof(double), _Alignof(double), nu_double, np_double},
915881
#ifdef Py_HAVE_C_COMPLEX
916-
{'F', sizeof(float complex), FLOAT_COMPLEX_ALIGN, nu_float_complex, np_float_complex},
917-
{'D', sizeof(double complex), DOUBLE_COMPLEX_ALIGN, nu_double_complex, np_double_complex},
882+
{'F', sizeof(float complex), _Alignof(float complex), nu_float_complex, np_float_complex},
883+
{'D', sizeof(double complex), _Alignof(double complex), nu_double_complex, np_double_complex},
918884
#else
919885
{'F', 1, 0, nu_complex_stub, np_complex_stub},
920886
{'D', 1, 0, nu_complex_stub, np_complex_stub},
921887
#endif
922-
{'P', sizeof(void *), VOID_P_ALIGN, nu_void_p, np_void_p},
888+
{'P', sizeof(void *), _Alignof(void *), nu_void_p, np_void_p},
923889
{0}
924890
};
925891