summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorrillig <rillig@NetBSD.org>2022-06-24 20:32:12 +0000
committerrillig <rillig@NetBSD.org>2022-06-24 20:32:12 +0000
commita9fffdbe9bcef4eaed38de84796f25478aba09ac (patch)
tree696315c3637559af9a6465c09cfb136a38c8bf36 /tests
parentd4d83b4d3968baabb5f2d40b6baa44b3e5b9f032 (diff)
tests/lint: demonstrate warning for cast between compatible structs
Diffstat (limited to 'tests')
-rw-r--r--tests/usr.bin/xlint/lint1/msg_247.c39
1 files changed, 36 insertions, 3 deletions
diff --git a/tests/usr.bin/xlint/lint1/msg_247.c b/tests/usr.bin/xlint/lint1/msg_247.c
index 170f305e64e..686aed41c9e 100644
--- a/tests/usr.bin/xlint/lint1/msg_247.c
+++ b/tests/usr.bin/xlint/lint1/msg_247.c
@@ -1,4 +1,4 @@
-/* $NetBSD: msg_247.c,v 1.22 2022/06/24 20:16:21 rillig Exp $ */
+/* $NetBSD: msg_247.c,v 1.23 2022/06/24 20:32:12 rillig Exp $ */
# 3 "msg_247.c"
// Test for message: pointer cast from '%s' to '%s' may be troublesome [247]
@@ -103,7 +103,7 @@ struct counter_impl {
void *allocate(void);
struct counter *
-counter_new(void)
+counter_new_typesafe(void)
{
struct counter_impl *impl = allocate();
impl->public_part.count = 12345;
@@ -111,6 +111,16 @@ counter_new(void)
return &impl->public_part;
}
+struct counter *
+counter_new_cast(void)
+{
+ struct counter_impl *impl = allocate();
+ impl->public_part.count = 12345;
+ impl->saved_count = 12346;
+ /* expect+1: warning: pointer cast from 'pointer to struct counter_impl' to 'pointer to struct counter' may be troublesome [247] */
+ return (struct counter *)impl;
+}
+
void
counter_increment(struct counter *counter)
{
@@ -156,7 +166,7 @@ lh_OPENSSL_STRING_new(void)
*/
return (struct lhash_st_OPENSSL_STRING *)OPENSSL_LH_new();
}
-# 160 "msg_247.c" 2
+# 170 "msg_247.c" 2
void sink(const void *);
@@ -272,3 +282,26 @@ cast_between_sockaddr_variants(void *ptr)
return t6;
}
+
+
+// From jemalloc.
+
+typedef struct ctl_node_s {
+ _Bool named;
+} ctl_node_t;
+
+typedef struct ctl_named_node_s {
+ ctl_node_t node;
+ const char *name;
+} ctl_named_node_t;
+
+void *
+cast_between_initial_struct(void *ptr)
+{
+ /* expect+1: warning: pointer cast from 'pointer to struct ctl_named_node_s' to 'pointer to struct ctl_node_s' may be troublesome [247] */
+ void *t1 = (ctl_node_t *)(ctl_named_node_t *)ptr;
+
+ void *t2 = (ctl_named_node_t *)(ctl_node_t *)ptr;
+
+ return t2;
+}