Module Name: src Committed By: rillig Date: Sun Apr 23 11:52:43 UTC 2023
Modified Files: src/tests/usr.bin/xlint/lint1: msg_135.c Log Message: tests/lint: add rationale for not warning about alignment problems To generate a diff of this commit: cvs rdiff -u -r1.14 -r1.15 src/tests/usr.bin/xlint/lint1/msg_135.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/tests/usr.bin/xlint/lint1/msg_135.c diff -u src/tests/usr.bin/xlint/lint1/msg_135.c:1.14 src/tests/usr.bin/xlint/lint1/msg_135.c:1.15 --- src/tests/usr.bin/xlint/lint1/msg_135.c:1.14 Sat Apr 22 20:54:28 2023 +++ src/tests/usr.bin/xlint/lint1/msg_135.c Sun Apr 23 11:52:43 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: msg_135.c,v 1.14 2023/04/22 20:54:28 rillig Exp $ */ +/* $NetBSD: msg_135.c,v 1.15 2023/04/23 11:52:43 rillig Exp $ */ # 3 "msg_135.c" // Test for message: converting '%s' to '%s' increases alignment from %u to %u [135] @@ -77,13 +77,21 @@ plain_char_to_unsigned_type(char *cp) /* * Converting a pointer with a low alignment requirement to a union that - * includes other types with higher alignment requirements is safe. While - * accessing any other member of the union might trigger an alignment - * violation, such an access would invoke undefined behavior anyway. + * includes other types with higher alignment requirements is considered safe. + * While accessing any other member of the union might trigger an alignment + * violation, such an access is not likely from an application point of view, + * as it would access undefined memory and thus invoke undefined behavior. * * A practical case for this pattern are tagged unions, in which the first * member of the struct determines how the remaining members are interpreted. * See sbin/newfs_udf, function udf_validate_tag_and_crc_sums for an example. + * + * C99 6.2.5p26 defines the representation and alignment of types, stating + * that pointers to union types need not have the same representation and + * alignment as pointers to other types. + * + * C99 6.7.2.1p14 and C23 6.7.2.1p18 both state that a "pointer to a union + * object [...] points to each of its members [...], and vice versa". */ double cast_to_union(void)