/*
  !!DESCRIPTION!! this code is not supposed to compile
  !!ORIGIN!!      LCC 4.1 Testsuite
  !!LICENCE!!     own, freely distributeable for non-profit. read CPYRIGHT.LCC
*/

main() {
        return 0;
}

nested(a,b) {
        if ((a<4 && b == 'r')
                || (a == 1 && (b == 'h' || b == 'i'))
                || (a == 2 && (b == 'o' || b == 'y'))
        ) a=b;
}

/* type name scope */

void s(struct D *d) {}  /* this struct D differs from the one below */
typedef struct D D;
struct D {int x, y;} Dy={0};
D Dz={1};
Dfunc(){
        D a; a.y=1;
        s(&Dy);         /* error */
}

/* qualifiers */

const a; int b;
const int a, *x; int b, *y;
volatile unsigned z;

f() {
        x = y;
        z = z + z;      /* should be 2 references to z's r-value */
}
f1() {
        x = &a;
        x = &b;
        y = &a;         /* error */
        y = &b;
}
f2(int **a, int **b) {
        f(&x, &y);
        **a = 0;
        return **b;
}
g(const int *p) {
        g(&a);
        g(&b);
        return *p;
}
h(int *p) {
        f(&a);
        f(&b);
        return *p;
}
h1(const int x, int y) {
        h1(a,b);
        h1(b,a);
        return x + y;
}
h2() {
        char *b; const void *p;
        p = b;
        b = p;          /* error (incompatible pointer type) */
}

/* static naming */

extern int yy; set1() { { static yy=1; yy=2;} yy=4;}
static int yy; set2() { yy=5; {static yy=2; yy=3; }}
static void goo() {}
sss() { int goo; { static int goo();} goo=1;}

/*
rrr(p) float *p; { extern int xr;
 { static float xr;
 { extern int *xr; } p=&xr; }}
*/

/* local extern */

static int ss1;
int ss3;
extern int ss5;
setstatic() { extern int ss1,ss2,ss3,ss4; ss1 = ss2; ss3 = ss4; ss5 = 0;}
static int ss2;
int ss4;
static int ss5;

/* function prototypes */

int fx1(void);
int fx1();

/*
int gx1(double x);
*/
/* int gx1(x) double x; { gx1(&x); } */      /* error */

int hx1();
/*
int hx1(double x,...); */ /* error */

/*
int ff1(double x, int *y);
int ff1(x,y) float x; int y[]; {x=y[0];}
*/

int gg1(int a);
int gg1(a,b){a=b;}

int hh1(const int x);
hh1(a) {return a;}

extern int strcmp(const char*, const char*);
extern void qsort(void*, int, int, int (*)(const void*, const void*));
extern int cmp(char**a, char**b) { return strcmp(*a,*b); }
sort() {
        int n; char *a[100];
        qsort(a, n, sizeof(char*), (int (*)(const void*, const void*))cmp);
        qsort(a, n, sizeof(char*), cmp);        /* error (incompatible pointer type) */
}

/* nasty calls */

onearg(){
        int a,b,c,d;
        f( ( (a? (b = 1): (c = 2)), (d ? 3 : 4) ) );    /* 1 argument */
}
