1. In a struct field redefinition, don't mark the struct erroneous. The field is erroneous, but the struct is otherwise well formed. 2. Don't emit diagnostics about functions that are known to be broken already. Either fix is sufficient to silence the second diagnostic in the example, but the combination is better :) llvm-svn: 70371
44 lines
816 B
C
44 lines
816 B
C
// RUN: clang-cc -fsyntax-only -verify %s
|
|
// PR3459
|
|
struct bar {
|
|
char n[1];
|
|
};
|
|
|
|
struct foo {
|
|
char name[(int)&((struct bar *)0)->n];
|
|
char name2[(int)&((struct bar *)0)->n - 1]; //expected-error{{array size is negative}}
|
|
};
|
|
|
|
// PR3430
|
|
struct s {
|
|
struct st {
|
|
int v;
|
|
} *ts;
|
|
};
|
|
|
|
struct st;
|
|
|
|
int foo() {
|
|
struct st *f;
|
|
return f->v + f[0].v;
|
|
}
|
|
|
|
// PR3642, PR3671
|
|
struct pppoe_tag {
|
|
short tag_type;
|
|
char tag_data[];
|
|
};
|
|
struct datatag {
|
|
struct pppoe_tag hdr; //expected-warning{{field 'hdr' with variable sized type 'struct pppoe_tag' not at the end of a struct or class is a GNU extension}}
|
|
char data;
|
|
};
|
|
|
|
|
|
// PR4092
|
|
struct s0 {
|
|
char a; // expected-note {{previous declaration is here}}
|
|
char a; // expected-error {{duplicate member 'a'}}
|
|
};
|
|
|
|
struct s0 f0(void) {}
|