(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
analyzer/
pr104560-1.c
       1  /* Reduced/adapted from false positive from -Wanalyzer-free-of-non-heap
       2     seen on rdma-core.  */
       3  
       4  #include <stddef.h>
       5  
       6  #define check_types_match(expr1, expr2)			\
       7  	((typeof(expr1) *)0 != (typeof(expr2) *)0)
       8  
       9  #define container_of(member_ptr, containing_type, member)		\
      10  	 ((containing_type *)						\
      11  	  ((char *)(member_ptr)						\
      12  	   - container_off(containing_type, member))			\
      13  	  + check_types_match(*(member_ptr), ((containing_type *)0)->member))
      14  
      15  #define container_off(containing_type, member)	\
      16  	offsetof(containing_type, member)
      17  
      18  struct ibv_device {
      19  	/* [...snip...] */
      20  };
      21  
      22  struct verbs_device {
      23  	struct ibv_device device; /* Must be first */
      24  	/* [...snip...] */
      25  	int placeholder;
      26  };
      27  
      28  struct mlx5_device {
      29  	struct verbs_device verbs_dev;
      30  	int placeholder;
      31  };
      32  
      33  static inline struct mlx5_device *to_mdev(struct ibv_device *ibdev)
      34  {
      35  	return container_of(ibdev, struct mlx5_device, verbs_dev.device);
      36  }
      37    
      38  static void mlx5_uninit_device(struct verbs_device *verbs_device)
      39  {
      40          struct mlx5_device *dev = to_mdev(&verbs_device->device);
      41  
      42          __builtin_free(dev); /* { dg-bogus "not on the heap" } */
      43  }