Fix invalid code generated due to anoymous structs/unions (#572)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9b07724..b9e9aec 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+# 8.0.1
+
+- Fixed invalid code generated due to anonymous structs/unions with unsupported types.
+
 # 8.0.0
 
 - Stable release for Dart 3.0 with support for class modifers, variadic arguments, and `@Native`s.
diff --git a/lib/src/header_parser/sub_parsers/compounddecl_parser.dart b/lib/src/header_parser/sub_parsers/compounddecl_parser.dart
index 93d662d..8c700c9 100644
--- a/lib/src/header_parser/sub_parsers/compounddecl_parser.dart
+++ b/lib/src/header_parser/sub_parsers/compounddecl_parser.dart
@@ -294,12 +294,15 @@
         break;
       case clang_types.CXCursorKind.CXCursor_UnionDecl:
       case clang_types.CXCursorKind.CXCursor_StructDecl:
-        final mt = cursor.toCodeGenType();
-
         // If the union/struct are anonymous, then we need to add them now,
         // otherwise they will be added in the next iteration.
         if (!cursor.isAnonymousRecordDecl()) break;
 
+        final mt = cursor.toCodeGenType();
+        if (mt.isIncompleteCompound) {
+          parsed.incompleteCompoundMember = true;
+        }
+
         // Anonymous members are always unnamed. To avoid environment-
         // dependent naming issues with the generated code, we explicitly
         // use the empty string as spelling.
diff --git a/pubspec.yaml b/pubspec.yaml
index 58e6bfb..fcc83ca 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -3,7 +3,7 @@
 # BSD-style license that can be found in the LICENSE file.
 
 name: ffigen
-version: 8.0.0
+version: 8.0.1
 description: Generator for FFI bindings, using LibClang to parse C header files.
 repository: https://github.com/dart-lang/ffigen
 
diff --git a/test/header_parser_tests/expected_bindings/_expected_unions_bindings.dart b/test/header_parser_tests/expected_bindings/_expected_unions_bindings.dart
index 82fedd0..9ef50eb 100644
--- a/test/header_parser_tests/expected_bindings/_expected_unions_bindings.dart
+++ b/test/header_parser_tests/expected_bindings/_expected_unions_bindings.dart
@@ -79,3 +79,5 @@
   @ffi.Float()
   external double b;
 }
+
+final class Union7 extends ffi.Opaque {}
diff --git a/test/header_parser_tests/unions.h b/test/header_parser_tests/unions.h
index e7d86ff..7f03834 100644
--- a/test/header_parser_tests/unions.h
+++ b/test/header_parser_tests/unions.h
@@ -46,6 +46,21 @@
     };
 };
 
+// Multiple anonymous declarations with incomplete members
+union Union7
+{
+    union
+    {
+        float a;
+    };
+
+    union
+    {
+        float b;
+        int c[];
+    };
+};
+
 void func1(union Union2 *s);
 
 // Incomplete array parameter will be treated as a pointer.