#include <stdio.h>
#define ASIZE(a) (sizeof (a) / sizeof((a)[0]))
#define GET_COMPATIBLE_ARRAY_PTR_TYPE( a ) __typeof__((a)[0])(*)[ASIZE(a)]
#define GET_CHECKING_FUNC_PTR_TYPE( a ) void (*)(GET_COMPATIBLE_ARRAY_PTR_TYPE( a ))
#define CHECK_ARRAY_SEGFAULT( a ) ((GET_CHECKING_FUNC_PTR_TYPE( a ))NULL)(&(a))
int main(void)
{
short a[3];
short *b;
int c[2];
int *d;
long long e[5][4];
char *f[4];
char (*g)[4];
(void)a; (void)b; (void)c; (void)d; (void)e; (void)f; (void)g;
printf("CHECK_ARRAY_SEGFAULT() only 'accepts' arrays (try uncommenting).\n"); CHECK_ARRAY_SEGFAULT( a );
//CHECK_ARRAY_SEGFAULT( b );
CHECK_ARRAY_SEGFAULT( c );
//CHECK_ARRAY_SEGFAULT( d );
CHECK_ARRAY_SEGFAULT( e );
//CHECK_ARRAY_SEGFAULT( f );
//CHECK_ARRAY_SEGFAULT( g );
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiAKI2RlZmluZSBBU0laRShhKSAoc2l6ZW9mIChhKSAvIHNpemVvZigoYSlbMF0pKQojZGVmaW5lIEdFVF9DT01QQVRJQkxFX0FSUkFZX1BUUl9UWVBFKCBhICkgX190eXBlb2ZfXygoYSlbMF0pKCopW0FTSVpFKGEpXQojZGVmaW5lIEdFVF9DSEVDS0lOR19GVU5DX1BUUl9UWVBFKCBhICkgdm9pZCAoKikoR0VUX0NPTVBBVElCTEVfQVJSQVlfUFRSX1RZUEUoIGEgKSkKI2RlZmluZSBDSEVDS19BUlJBWV9TRUdGQVVMVCggYSApICgoR0VUX0NIRUNLSU5HX0ZVTkNfUFRSX1RZUEUoIGEgKSlOVUxMKSgmKGEpKQoKaW50IG1haW4odm9pZCkKewoJc2hvcnQgYVszXTsKCXNob3J0ICpiOwoJaW50IGNbMl07CglpbnQgKmQ7Cglsb25nIGxvbmcgZVs1XVs0XTsKCWNoYXIgKmZbNF07CgljaGFyICgqZylbNF07Cgkodm9pZClhOyAodm9pZCliOyAodm9pZCljOyAodm9pZClkOyAodm9pZCllOyAodm9pZClmOyAodm9pZClnOwoJcHJpbnRmKCJDSEVDS19BUlJBWV9TRUdGQVVMVCgpIG9ubHkgJ2FjY2VwdHMnIGFycmF5cyAodHJ5IHVuY29tbWVudGluZykuXG4iKTsKCUNIRUNLX0FSUkFZX1NFR0ZBVUxUKCBhICk7CgkvL0NIRUNLX0FSUkFZX1NFR0ZBVUxUKCBiICk7CglDSEVDS19BUlJBWV9TRUdGQVVMVCggYyApOwoJLy9DSEVDS19BUlJBWV9TRUdGQVVMVCggZCApOwoJQ0hFQ0tfQVJSQVlfU0VHRkFVTFQoIGUgKTsKCS8vQ0hFQ0tfQVJSQVlfU0VHRkFVTFQoIGYgKTsKCS8vQ0hFQ0tfQVJSQVlfU0VHRkFVTFQoIGcgKTsKCXJldHVybiAwOwp9Cg==