Sanity fix for PR3642: if we're treating a diagnostic as an error, it's

required to actually be an error for correctness.  The attached testcase 
now gives an error instead of mysteriously crashing.

Now, it's possible we actually want to support the given usage, but I 
haven't looked at the relevant code closely.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@65253 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Eli Friedman 2009-02-22 00:20:44 +00:00
Родитель 8d7d6e9a48
Коммит 85c3515516
2 изменённых файлов: 12 добавлений и 1 удалений

Просмотреть файл

@ -728,7 +728,7 @@ DIAG(err_field_declared_as_function, ERROR,
"field %0 declared as a function")
DIAG(err_field_incomplete, ERROR,
"field has incomplete type %0")
DIAG(err_variable_sized_type_in_struct, EXTENSION,
DIAG(err_variable_sized_type_in_struct, ERROR,
"variable sized type %0 must be at end of struct or class")
DIAG(err_flexible_array_empty_struct, ERROR,
"flexible array %0 not allowed in otherwise empty struct")

Просмотреть файл

@ -22,3 +22,14 @@ int foo() {
struct st *f;
return f->v + f[0].v;
}
// PR3642
struct pppoe_tag {
short tag_type;
char tag_data[];
};
struct datatag {
struct pppoe_tag hdr; //expected-error{{variable sized type 'hdr' must be at end of struct}}
char data;
};