sizeof-array-argument.c 1.37 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
/* PR c/6940 */
/* { dg-do compile } */

/* Test -Wsizeof-array-argument warning.  */

typedef int T[2][2];

int
fn1 (int a[])
{
  return sizeof a; /* { dg-warning "on array function parameter" } */
}

int
fn2 (int x, int b[3])
{
  return x + sizeof b; /* { dg-warning "on array function parameter" } */
}

int
fn3 (int *p)
{
  return sizeof p;
}

int fn4 (int *p);
int
fn4 (int p[])
{
  return sizeof p; /* { dg-warning "on array function parameter" } */
}

int fn5 (int x[]);
int
fn5 (int *x)
{
  return sizeof x;
}

#ifndef __cplusplus
/* C++ doesn't know VLA unspec.  */
int fn6 (int x[*]);
int
fn6 (int x[])
{
  return sizeof x; /* { dg-warning "on array function parameter" "" { target c } } */
}
#endif

int
fn7 (int x[][2])
{
  return sizeof x; /* { dg-warning "on array function parameter" } */
}

int
fn8 (char *x[])
{
  return sizeof x; /* { dg-warning "on array function parameter" } */
}

int
fn9 (char **x)
{
  return sizeof x;
}

#ifndef __cplusplus
int
fn10 (int a, char x[static sizeof a])
{
  return sizeof x; /* { dg-warning "on array function parameter" "" { target c } } */
}

int
fn11 (a)
  char a[];
{
  return sizeof a; /* { dg-warning "on array function parameter" "" { target c } } */
}

int
fn12 (a)
  char *a;
{
  return sizeof a;
}
#endif

int
fn13 (char (*x)[2])
{
  return sizeof x;
}

int
fn14 (T t)
{
  return sizeof t; /* { dg-warning "on array function parameter" } */
}