Rule 11.1 and NULL defined as ((void*) 0)

6.11 Pointer Type Conversions

Moderators: misra-c, david ward

Post Reply
roberto
Posts: 11
Joined: Wed Jun 04, 2008 10:33 pm
Company: University of Parma, Italy

Rule 11.1 and NULL defined as ((void*) 0)

Post by roberto » Sat Feb 14, 2009 2:02 pm

Please consider the following test program:

Code: Select all

#define NULL ((void*) 0)

struct super_block;
struct inode;

typedef int (*find_inode_t)(struct inode *, unsigned long, void *);


extern struct inode * iget4_locked(struct super_block *, unsigned long,
				   find_inode_t, void *);

static inline struct inode *iget(struct super_block *sb, unsigned long ino)
{
	struct inode *inode = iget4_locked(sb, ino, NULL, NULL);
	return inode;
}


My reading of rule 11.1 is that NULL (so defined, which is quite common) cannot be passed that way to iget4_locked(). However, since I see zillions of violations of this kind, I am caught by the doubt.
Many thanks,

Roberto

misra-c
Posts: 566
Joined: Thu Jan 05, 2006 1:11 pm

Re: Rule 11.1 and NULL defined as ((void*) 0)

Post by misra-c » Tue Apr 07, 2009 4:05 pm

A NULL pointer constant (however defined) can be converted to, assigned to, or compared for equality to a function pointer. Note that this exception to the rule is discussed in the normative text above Rule 11.1.

Rule 11.1 will be amended in future to clarify this point.

Tracking ID: 18
---
Posted by and on behalf of
the MISRA C Working Group

Post Reply

Return to “6.11 Pointer Type Conversions”