
/* Test conversion of expressions:
 *    array of T => pointer to T
 *    function => pointer to function
 */

int func(int *);
int burg(int (*fp)());
int clog();

void testFunctionArguments()
{
    int a[3];
    func(a);

    int b[] = { 0 };
    func(b);

    burg(clog);
}

void testIndexing()
{
    int a[3];
    a[0] = 1;
}

void testAdd()
{
    int a[3];
    int* p = a + 1;
    p = 1 + 1;
}

void testMin()
{
    int a[3];
    int* p = a - 1;
}

void testCond()
{
    int i;
    int a[3];
    int b[3];
    int* p = i ? a : b;
}

int testIndexing2()
{
    int *p;
    int i = p[1];
    i = 2[p];
}

void testAssign()
{
    int a[3];
    int *p = a;
}

void testComma()
{
    int a[3];
    int* p = (1, a) + 1;
    _Static_assert(sizeof((1, a)) == sizeof(int*), "testComma");
}

int testArrow()
{
    struct S { int m, n; };

    struct S a[3];
    return a->m;
}
