]> granicus.if.org Git - clang/commitdiff
Sanity fix for PR3642: if we're treating a diagnostic as an error, it's
authorEli Friedman <eli.friedman@gmail.com>
Sun, 22 Feb 2009 00:20:44 +0000 (00:20 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Sun, 22 Feb 2009 00:20:44 +0000 (00:20 +0000)
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

include/clang/Basic/DiagnosticSemaKinds.def
test/Sema/struct-decl.c

index 7ebb5a706cda5934b535cc6c8471bdb3bb506ff8..fb9f36399baf1c088730eb028ea5f58c64e47f07 100644 (file)
@@ -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")
index cdc9eaae3bbd336f4afc83130effb1bce86a9f56..aa2d3b6342b696c8cbe0864661c184d407882059 100644 (file)
@@ -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;
+};
+