Merge pull request #2345 from acqn/PtrFix
[cc65] Fixed regression on comparison to null pointer
This commit is contained in:
71
test/val/nullptr.c
Normal file
71
test/val/nullptr.c
Normal file
@@ -0,0 +1,71 @@
|
||||
/* Bug # - Pointer compared to null pointer constant */
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
unsigned failures;
|
||||
|
||||
struct S {
|
||||
char a[4];
|
||||
} *p;
|
||||
|
||||
#define TEST_NULL(E) \
|
||||
do { \
|
||||
a = (E) == 0 && !(E); \
|
||||
if (!a) \
|
||||
{ \
|
||||
++failures; \
|
||||
printf("failed: " #E " should be null\n"); \
|
||||
} \
|
||||
} while(0);
|
||||
|
||||
#define TEST_NON_NULL(E) \
|
||||
do { \
|
||||
a = (E) != 0 && !!(E) && (E); \
|
||||
if (!a) \
|
||||
{ \
|
||||
++failures; \
|
||||
printf("failed: " #E " should be non-null\n"); \
|
||||
} \
|
||||
} while(0);
|
||||
|
||||
int main()
|
||||
{
|
||||
int a;
|
||||
|
||||
/* Null pointer constant (per ISO C) compared equal to null pointer constant */
|
||||
TEST_NULL((void*)0)
|
||||
|
||||
/* Null pointer compared equal to null pointer constant */
|
||||
TEST_NULL((char*)0)
|
||||
|
||||
/* Null pointer obtained with -> */
|
||||
TEST_NULL(((struct S*)0)->a)
|
||||
|
||||
/* Null pointer obtained with -> */
|
||||
TEST_NULL(p->a)
|
||||
|
||||
/* Null pointer obtained with cast and -> */
|
||||
TEST_NULL(((struct S*)(a = 0))->a)
|
||||
|
||||
/* Null pointer obtained with cast and -> */
|
||||
TEST_NULL((a = 0, ((struct S*)a)->a))
|
||||
|
||||
/* Non-null pointer obtained with cast and -> */
|
||||
TEST_NON_NULL(((struct S*)(long)(a = 0x1234))->a)
|
||||
|
||||
/* Non-null pointer obtained with cast and -> */
|
||||
TEST_NON_NULL((a = 0x1234, ((struct S*)a)->a))
|
||||
|
||||
/* Non-null pointer obtained with cast and -> */
|
||||
TEST_NON_NULL(((struct S*)&a)->a)
|
||||
|
||||
/* Non-null pointer obtained with cast and -> */
|
||||
TEST_NON_NULL(((struct S*)&main)->a)
|
||||
|
||||
if (failures != 0)
|
||||
{
|
||||
printf("failures: %u\n", failures);
|
||||
}
|
||||
|
||||
return failures;
|
||||
}
|
||||
Reference in New Issue
Block a user