Fix some noisy warnings that often show up in ObjC binding generation
diff --git a/lib/src/header_parser/clang_bindings/clang_bindings.dart b/lib/src/header_parser/clang_bindings/clang_bindings.dart
index 8185f34..5bb0d63 100644
--- a/lib/src/header_parser/clang_bindings/clang_bindings.dart
+++ b/lib/src/header_parser/clang_bindings/clang_bindings.dart
@@ -2522,6 +2522,32 @@
   static const int CXTypeNullability_Invalid = 3;
 }
 
+/// List the possible error codes for \c clang_Type_getSizeOf,
+/// \c clang_Type_getAlignOf, \c clang_Type_getOffsetOf and
+/// \c clang_Cursor_getOffsetOf.
+///
+/// A value of this enumeration type can be returned if the target type is not
+/// a valid argument to sizeof, alignof or offsetof.
+abstract class CXTypeLayoutError {
+  /// Type is of kind CXType_Invalid.
+  static const int CXTypeLayoutError_Invalid = -1;
+
+  /// The type is an incomplete Type.
+  static const int CXTypeLayoutError_Incomplete = -2;
+
+  /// The type is a dependent Type.
+  static const int CXTypeLayoutError_Dependent = -3;
+
+  /// The type is not a constant size type.
+  static const int CXTypeLayoutError_NotConstantSize = -4;
+
+  /// The Field name is not valid for this record.
+  static const int CXTypeLayoutError_InvalidFieldName = -5;
+
+  /// The type is undeduced.
+  static const int CXTypeLayoutError_Undeduced = -6;
+}
+
 /// Describes how the traversal of the children of a particular
 /// cursor should proceed after visiting a particular child cursor.
 ///
diff --git a/lib/src/header_parser/sub_parsers/compounddecl_parser.dart b/lib/src/header_parser/sub_parsers/compounddecl_parser.dart
index 9e284b2..81c9761 100644
--- a/lib/src/header_parser/sub_parsers/compounddecl_parser.dart
+++ b/lib/src/header_parser/sub_parsers/compounddecl_parser.dart
@@ -38,7 +38,8 @@
       flexibleArrayMember ||
       bitFieldMember ||
       (dartHandleMember && config.useDartHandle) ||
-      incompleteCompoundMember;
+      incompleteCompoundMember ||
+      alignment == clang_types.CXTypeLayoutError.CXTypeLayoutError_Incomplete;
 
   // A struct without any attribute is definitely not packed. #pragma pack(...)
   // also adds an attribute, but it's unexposed and cannot be travesed.
@@ -60,7 +61,7 @@
   /// Returns pack value of a struct depending on config, returns null for no
   /// packing.
   int? get packValue {
-    if (compound.isStruct && _isPacked) {
+    if (compound.isStruct && _isPacked && !isIncomplete) {
       if (strings.packingValuesMap.containsKey(alignment)) {
         return alignment;
       } else {
diff --git a/lib/src/header_parser/sub_parsers/enumdecl_parser.dart b/lib/src/header_parser/sub_parsers/enumdecl_parser.dart
index 1353f2d..b33e3e7 100644
--- a/lib/src/header_parser/sub_parsers/enumdecl_parser.dart
+++ b/lib/src/header_parser/sub_parsers/enumdecl_parser.dart
@@ -96,6 +96,9 @@
       case clang_types.CXCursorKind.CXCursor_EnumConstantDecl:
         _addEnumConstantToEnumClass(cursor);
         break;
+      case clang_types.CXCursorKind.CXCursor_UnexposedAttr:
+        // Ignore.
+        break;
       default:
         _logger.fine('invalid enum constant');
     }
diff --git a/lib/src/header_parser/sub_parsers/unnamed_enumdecl_parser.dart b/lib/src/header_parser/sub_parsers/unnamed_enumdecl_parser.dart
index 879dfea..320e084 100644
--- a/lib/src/header_parser/sub_parsers/unnamed_enumdecl_parser.dart
+++ b/lib/src/header_parser/sub_parsers/unnamed_enumdecl_parser.dart
@@ -47,6 +47,9 @@
           _addUnNamedEnumConstant(cursor);
         }
         break;
+      case clang_types.CXCursorKind.CXCursor_UnexposedAttr:
+        // Ignore.
+        break;
       default:
         _logger.severe('Invalid enum constant.');
     }
diff --git a/tool/libclang_config.yaml b/tool/libclang_config.yaml
index b2ea7b4..339c52c 100644
--- a/tool/libclang_config.yaml
+++ b/tool/libclang_config.yaml
@@ -41,6 +41,7 @@
     - CXEvalResultKind
     - CXObjCPropertyAttrKind
     - CXTypeNullabilityKind
+    - CXTypeLayoutError
 
 structs:
   include: