diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.def b/clang/include/clang/Basic/DiagnosticSemaKinds.def index 7ebb5a706cda5934b535cc6c8471bdb3bb506ff8..fb9f36399baf1c088730eb028ea5f58c64e47f07 100644 --- a/clang/include/clang/Basic/DiagnosticSemaKinds.def +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.def @@ -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") diff --git a/clang/test/Sema/struct-decl.c b/clang/test/Sema/struct-decl.c index cdc9eaae3bbd336f4afc83130effb1bce86a9f56..aa2d3b6342b696c8cbe0864661c184d407882059 100644 --- a/clang/test/Sema/struct-decl.c +++ b/clang/test/Sema/struct-decl.c @@ -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; +}; +