diff --git a/src/kernel_internals/typing/cabs2cil.ml b/src/kernel_internals/typing/cabs2cil.ml
index a8012c9c465ba4586ebad9e4b558678c24d625ee..b6660cac117df911653abe7845e0ba8ae15a8897 100644
--- a/src/kernel_internals/typing/cabs2cil.ml
+++ b/src/kernel_internals/typing/cabs2cil.ml
@@ -613,7 +613,15 @@ let process_pragmas_pack_align_field_attributes fi fattrs cattr =
            Drop existing "aligned" attributes, if there are invalid ones. *)
         if Cil.hasAttribute "packed" cattr then (dropAttribute "aligned" fattrs)
         else begin
-          let align = Integer.(min n (of_int (Cil.bytesSizeOf fi.ftype))) in
+          let sizeof_type =
+            match Cil.unrollType fi.ftype with
+            | TArray (_, None, _, _) ->
+              (* flexible array member: use size of pointer *)
+              Cil.bitsSizeOf theMachine.upointType
+            | _ ->
+              Cil.bytesSizeOf fi.ftype
+          in
+          let align = Integer.(min n (of_int sizeof_type)) in
           Kernel.feedback ~dkey:Kernel.dkey_typing_pragma ~current:true
             "adding aligned(%a) attribute to field '%s.%s' due to packing pragma"
             (Integer.pretty ~hexa:false) align fi.fcomp.cname fi.fname;
diff --git a/tests/misc/oracle/pragma-pack.0.res.oracle b/tests/misc/oracle/pragma-pack.0.res.oracle
index 4ca3caef6f2bb369a68f39a45945228800208ff8..8688b345c3b3594eeea05def8b5272705946c351 100644
--- a/tests/misc/oracle/pragma-pack.0.res.oracle
+++ b/tests/misc/oracle/pragma-pack.0.res.oracle
@@ -167,6 +167,16 @@
   adding aligned(2) attribute to comp '__anonstruct_test7_2_14' due to packing pragma
 [kernel:typing:pragma] tests/misc/pragma-pack.c:252: 
   packing pragma: popped alignment 16
+[kernel:typing:pragma] tests/misc/pragma-pack.c:336: 
+  packing pragma: pushing alignment 16, setting alignment to 1
+[kernel:typing:pragma] tests/misc/pragma-pack.c:337: 
+  adding aligned(1) attribute to field '__anonstruct_barcode_bmp_t_18.len' due to packing pragma
+[kernel:typing:pragma] tests/misc/pragma-pack.c:337: 
+  adding aligned(1) attribute to field '__anonstruct_barcode_bmp_t_18.data' due to packing pragma
+[kernel:typing:pragma] tests/misc/pragma-pack.c:337: 
+  adding aligned(1) attribute to comp '__anonstruct_barcode_bmp_t_18' due to packing pragma
+[kernel:typing:pragma] tests/misc/pragma-pack.c:341: 
+  packing pragma: popped alignment 16
 [eva] Analyzing a complete application starting at main
 [eva] Computing initial state
 [eva] Initial state computed
diff --git a/tests/misc/pragma-pack.c b/tests/misc/pragma-pack.c
index 533115f5debdb331873325fee4022f59cf3a1fd2..4d81f069887ec1d621c24bf091c486a1801455f0 100644
--- a/tests/misc/pragma-pack.c
+++ b/tests/misc/pragma-pack.c
@@ -332,6 +332,14 @@ void tests2() {
   TEST(test8);
 }
 
+// Test resilience to crash due to align() attribute in flexible array member
+#pragma pack(push, 1)
+typedef struct {
+  int len;
+  unsigned char data[];
+} barcode_bmp_t;
+#pragma pack(pop)
+
 #ifndef __GNUC__
 // For MSVC testing on Visual C++
 int _tmain(int argc, _TCHAR* argv[]) {