diff options
author | Andrew Pinski <pinskia@gmail.com> | 2023-10-18 20:49:05 -0700 |
---|---|---|
committer | Andrew Pinski <pinskia@gmail.com> | 2023-10-19 09:49:13 -0700 |
commit | 9f33e4c50ee92a2053f52e5eb8f205afa54d4cb0 (patch) | |
tree | e62876b99fb6b5c06d4d2e09480328444bf6d0eb | |
parent | 00e7c49fa04a3766e4726322b427621a74b78c71 (diff) | |
download | gcc-9f33e4c50ee92a2053f52e5eb8f205afa54d4cb0.zip gcc-9f33e4c50ee92a2053f52e5eb8f205afa54d4cb0.tar.gz gcc-9f33e4c50ee92a2053f52e5eb8f205afa54d4cb0.tar.bz2 |
c: Don't warn about converting NULL to different sso endian [PR104822]
In a similar way we don't warn about NULL pointer constant conversion to
a different named address we should not warn to a different sso endian
either.
This adds the simple check.
Bootstrapped and tested on x86_64-linux-gnu with no regressions.
PR c/104822
gcc/c/ChangeLog:
* c-typeck.cc (convert_for_assignment): Check for null pointer
before warning about an incompatible scalar storage order.
gcc/testsuite/ChangeLog:
* gcc.dg/sso-18.c: New test.
* gcc.dg/sso-19.c: New test.
-rw-r--r-- | gcc/c/c-typeck.cc | 1 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/sso-18.c | 16 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/sso-19.c | 17 |
3 files changed, 34 insertions, 0 deletions
diff --git a/gcc/c/c-typeck.cc b/gcc/c/c-typeck.cc index 6e044b4..f39dc71 100644 --- a/gcc/c/c-typeck.cc +++ b/gcc/c/c-typeck.cc @@ -7449,6 +7449,7 @@ convert_for_assignment (location_t location, location_t expr_loc, tree type, /* See if the pointers point to incompatible scalar storage orders. */ if (warn_scalar_storage_order + && !null_pointer_constant_p (rhs) && (AGGREGATE_TYPE_P (ttl) && TYPE_REVERSE_STORAGE_ORDER (ttl)) != (AGGREGATE_TYPE_P (ttr) && TYPE_REVERSE_STORAGE_ORDER (ttr))) { diff --git a/gcc/testsuite/gcc.dg/sso-18.c b/gcc/testsuite/gcc.dg/sso-18.c new file mode 100644 index 0000000..799a0c85 --- /dev/null +++ b/gcc/testsuite/gcc.dg/sso-18.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* PR c/104822 */ + +#include <stddef.h> + +struct Sb { + int i; +} __attribute__((scalar_storage_order("big-endian"))); +struct Sl { + int i; +} __attribute__((scalar_storage_order("little-endian"))); + +/* Neither of these should warn about incompatible scalar storage order + as NULL pointers are compatiable with both endian. */ +struct Sb *pb = NULL; /* { dg-bogus "" } */ +struct Sl *pl = NULL; /* { dg-bogus "" } */ diff --git a/gcc/testsuite/gcc.dg/sso-19.c b/gcc/testsuite/gcc.dg/sso-19.c new file mode 100644 index 0000000..50f7b40 --- /dev/null +++ b/gcc/testsuite/gcc.dg/sso-19.c @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-std=c2x" } */ +/* PR c/104822 */ + +#include <stddef.h> + +struct Sb { + int i; +} __attribute__((scalar_storage_order("big-endian"))); +struct Sl { + int i; +} __attribute__((scalar_storage_order("little-endian"))); + +/* Neither of these should warn about incompatible scalar storage order + as NULL pointers are compatiable with both endian. */ +struct Sb *pb = nullptr; /* { dg-bogus "" } */ +struct Sl *pl = nullptr; /* { dg-bogus "" } */ |