diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am
index 84447185..516a7f4d 100644
--- a/tests/data/Makefile.am
+++ b/tests/data/Makefile.am
@@ -184,6 +184,14 @@ test-abidiff-exit/test-headers-dirs/test-headers-dir-v0.c \
 test-abidiff-exit/test-headers-dirs/test-headers-dir-v0.o \
 test-abidiff-exit/test-headers-dirs/test-headers-dir-v1.c \
 test-abidiff-exit/test-headers-dirs/test-headers-dir-v1.o \
+test-abidiff-exit/qualifier-typedef-array-v0.c \
+test-abidiff-exit/qualifier-typedef-array-v0.o \
+test-abidiff-exit/qualifier-typedef-array-v1.c \
+test-abidiff-exit/qualifier-typedef-array-v1.o \
+test-abidiff-exit/qualifier-typedef-array-report0.txt \
+test-abidiff-exit/qualifier-typedef-array-report1.txt \
+test-abidiff-exit/qualifier-typedef-array-report2.txt \
+test-abidiff-exit/qualifier-typedef-array-report3.txt \
 \
 test-diff-dwarf/test0-v0.cc		\
 test-diff-dwarf/test0-v0.o			\
diff --git a/tests/data/test-abidiff-exit/qualifier-typedef-array-report-0.txt b/tests/data/test-abidiff-exit/qualifier-typedef-array-report-0.txt
new file mode 100644
index 00000000..9666a8fd
--- /dev/null
+++ b/tests/data/test-abidiff-exit/qualifier-typedef-array-report-0.txt
@@ -0,0 +1,3 @@
+Functions changes summary: 0 Removed, 0 Changed (1 filtered out), 0 Added function
+Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
+
diff --git a/tests/data/test-abidiff-exit/qualifier-typedef-array-report-1.txt b/tests/data/test-abidiff-exit/qualifier-typedef-array-report-1.txt
new file mode 100644
index 00000000..0d73ae03
--- /dev/null
+++ b/tests/data/test-abidiff-exit/qualifier-typedef-array-report-1.txt
@@ -0,0 +1,81 @@
+Functions changes summary: 0 Removed, 1 Changed, 0 Added function
+Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
+
+1 function with some indirect sub-type change:
+
+  [C] 'function void fun(S*)' at qualifier-typedef-array-v1.c:37:1 has some indirect sub-type changes:
+    parameter 1 of type 'S*' has sub-type changes:
+      in pointed to type 'struct S' at qualifier-typedef-array-v1.c:10:1:
+        type size hasn't changed
+        12 data member changes:
+          type of 'A S::c_a' changed:
+            entity changed from 'typedef A' to compatible type 'void* const[7]'
+              array element type 'void*' changed:
+                entity changed from 'void*' to 'void* const'
+                type size hasn't changed
+              type size hasn't changed
+          type of 'A S::v_a' changed:
+            entity changed from 'typedef A' to compatible type 'void* volatile[7]'
+              array element type 'void*' changed:
+                entity changed from 'void*' to 'void* volatile'
+                type size hasn't changed
+              type size hasn't changed
+          type of 'A S::r_a' changed:
+            entity changed from 'typedef A' to compatible type 'void*[7]'
+          type of 'B S::c_b' changed:
+            typedef name changed from B to A at qualifier-typedef-array-v1.c:1:1
+            underlying type 'typedef A' at qualifier-typedef-array-v0.c:1:1 changed:
+              entity changed from 'typedef A' to compatible type 'void* const[7]'
+                array element type 'void*' changed:
+                  entity changed from 'void*' to 'void* const'
+                  type size hasn't changed
+                type size hasn't changed
+          type of 'B S::v_b' changed:
+            typedef name changed from B to A at qualifier-typedef-array-v1.c:1:1
+            underlying type 'typedef A' at qualifier-typedef-array-v0.c:1:1 changed:
+              entity changed from 'typedef A' to compatible type 'void* volatile[7]'
+                array element type 'void*' changed:
+                  entity changed from 'void*' to 'void* volatile'
+                  type size hasn't changed
+                type size hasn't changed
+          type of 'B S::r_b' changed:
+            typedef name changed from B to A at qualifier-typedef-array-v1.c:1:1
+            underlying type 'typedef A' at qualifier-typedef-array-v0.c:1:1 changed:
+              entity changed from 'typedef A' to compatible type 'void*[7]'
+          type of 'C S::v_c' changed:
+            entity changed from 'typedef C' to compatible type 'const volatile void* const[7]'
+              array element type 'void* const' changed:
+                'void* const' changed to 'const volatile void* const'
+              type name changed from 'void*[7]' to 'volatile void* const[7]'
+              type size hasn't changed
+          type of 'C S::r_c' changed:
+            entity changed from 'typedef C' to compatible type 'restrict void* const[7]'
+              array element type 'void* const' changed:
+                'void* const' changed to 'restrict const void* const'
+              type name changed from 'void*[7]' to 'restrict void* const[7]'
+              type size hasn't changed
+          type of 'D S::v_d' changed:
+            entity changed from 'typedef D' to compatible type 'const volatile void* const[7]'
+              array element type 'void* const' changed:
+                'void* const' changed to 'const volatile void* const'
+              type name changed from 'void*[7]' to 'volatile void* const[7]'
+              type size hasn't changed
+          type of 'D S::r_d' changed:
+            entity changed from 'typedef D' to compatible type 'restrict void* const[7]'
+              array element type 'void* const' changed:
+                'void* const' changed to 'restrict const void* const'
+              type name changed from 'void*[7]' to 'restrict void* const[7]'
+              type size hasn't changed
+          type of 'E S::r_e' changed:
+            entity changed from 'typedef E' to compatible type 'restrict const volatile void* const[7]'
+              array element type 'const volatile void* const' changed:
+                'const volatile void* const' changed to 'restrict const volatile volatile void* const'
+              type name changed from 'volatile void* const[7]' to 'restrict volatile void* const[7]'
+              type size hasn't changed
+          type of 'F S::r_f' changed:
+            entity changed from 'typedef F' to compatible type 'restrict const volatile void* const[7]'
+              array element type 'const volatile void* const' changed:
+                'const volatile void* const' changed to 'restrict const volatile volatile void* const'
+              type name changed from 'volatile void* const[7]' to 'restrict volatile void* const[7]'
+              type size hasn't changed
+
diff --git a/tests/data/test-abidiff-exit/qualifier-typedef-array-report-2.txt b/tests/data/test-abidiff-exit/qualifier-typedef-array-report-2.txt
new file mode 100644
index 00000000..b5b84c71
--- /dev/null
+++ b/tests/data/test-abidiff-exit/qualifier-typedef-array-report-2.txt
@@ -0,0 +1,5 @@
+Leaf changes summary: 0 artifact changed
+Changed leaf types summary: 0 leaf type changed
+Removed/Changed/Added functions summary: 0 Removed, 0 Changed, 0 Added function
+Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable
+
diff --git a/tests/data/test-abidiff-exit/qualifier-typedef-array-report-3.txt b/tests/data/test-abidiff-exit/qualifier-typedef-array-report-3.txt
new file mode 100644
index 00000000..b5b84c71
--- /dev/null
+++ b/tests/data/test-abidiff-exit/qualifier-typedef-array-report-3.txt
@@ -0,0 +1,5 @@
+Leaf changes summary: 0 artifact changed
+Changed leaf types summary: 0 leaf type changed
+Removed/Changed/Added functions summary: 0 Removed, 0 Changed, 0 Added function
+Removed/Changed/Added variables summary: 0 Removed, 0 Changed, 0 Added variable
+
diff --git a/tests/data/test-abidiff-exit/qualifier-typedef-array-v0.c b/tests/data/test-abidiff-exit/qualifier-typedef-array-v0.c
new file mode 100644
index 00000000..939a968e
--- /dev/null
+++ b/tests/data/test-abidiff-exit/qualifier-typedef-array-v0.c
@@ -0,0 +1,37 @@
+typedef void * A[7];
+typedef A B;
+typedef const B C;
+typedef C D;
+typedef volatile D E;
+typedef E F;
+typedef restrict F G;
+typedef G H;
+
+struct S {
+  A c_a;
+  A v_a;
+  A r_a;
+  B c_b;
+  B v_b;
+  B r_b;
+  C c_c;
+  C v_c;
+  C r_c;
+  D c_d;
+  D v_d;
+  D r_d;
+  E c_e;
+  E v_e;
+  E r_e;
+  F c_f;
+  F v_f;
+  F r_f;
+  G c_g;
+  G v_g;
+  G r_g;
+  H c_h;
+  H v_h;
+  H r_h;
+};
+
+void fun(struct S * s) { (void) s; }
diff --git a/tests/data/test-abidiff-exit/qualifier-typedef-array-v0.o b/tests/data/test-abidiff-exit/qualifier-typedef-array-v0.o
new file mode 100644
index 0000000000000000000000000000000000000000..9be7f99d5c271a5db02b6df590bac41031804916
GIT binary patch
diff --git a/tests/data/test-abidiff-exit/qualifier-typedef-array-v1.c b/tests/data/test-abidiff-exit/qualifier-typedef-array-v1.c
new file mode 100644
index 00000000..67e3e83c
--- /dev/null
+++ b/tests/data/test-abidiff-exit/qualifier-typedef-array-v1.c
@@ -0,0 +1,37 @@
+typedef void * A[7];
+typedef A B;
+typedef const B C;
+typedef C D;
+typedef volatile D E;
+typedef E F;
+typedef restrict F G;
+typedef G H;
+
+struct S {
+  const A c_a;     // +const
+  volatile A v_a;  // +volatile
+  restrict A r_a;  // +restrict
+  const B c_b;     // +const
+  volatile B v_b;  // +volatile
+  restrict B r_b;  // +restrict
+  const C c_c;     // same
+  volatile C v_c;  // +volatile
+  restrict C r_c;  // +restrict
+  const D c_d;     // same
+  volatile D v_d;  // +volatile
+  restrict D r_d;  // +restrict
+  const E c_e;     // same
+  volatile E v_e;  // same
+  restrict E r_e;  // +restrict
+  const F c_f;     // same
+  volatile F v_f;  // same
+  restrict F r_f;  // +restrict
+  const G c_g;     // same
+  volatile G v_g;  // same
+  restrict G r_g;  // same
+  const H c_h;     // same
+  volatile H v_h;  // same
+  restrict H r_h;  // same
+};
+
+void fun(struct S * s) { (void) s; }
diff --git a/tests/data/test-abidiff-exit/qualifier-typedef-array-v1.o b/tests/data/test-abidiff-exit/qualifier-typedef-array-v1.o
new file mode 100644
index 0000000000000000000000000000000000000000..f9e2188c346a65dbe2e8315d20f987970735987f
GIT binary patch
diff --git a/tests/test-abidiff-exit.cc b/tests/test-abidiff-exit.cc
index bb0262bb..021d2707 100644
--- a/tests/test-abidiff-exit.cc
+++ b/tests/test-abidiff-exit.cc
@@ -337,6 +337,50 @@ InOutSpec in_out_specs[] =
     "data/test-abidiff-exit/test-headers-dirs/test-headers-dir-report-2.txt",
     "output/test-abidiff-exit/test-headers-dirs/test-headers-dir-report-2.txt"
   },
+  {
+    "data/test-abidiff-exit/qualifier-typedef-array-v0.o",
+    "data/test-abidiff-exit/qualifier-typedef-array-v1.o",
+    "",
+    "",
+    "",
+    "",
+    abigail::tools_utils::ABIDIFF_OK,
+    "data/test-abidiff-exit/qualifier-typedef-array-report-0.txt",
+    "output/test-abidiff-exit/qualifier-typedef-array-report-0.txt"
+  },
+  {
+    "data/test-abidiff-exit/qualifier-typedef-array-v0.o",
+    "data/test-abidiff-exit/qualifier-typedef-array-v1.o",
+    "",
+    "",
+    "",
+    "--harmless",
+    abigail::tools_utils::ABIDIFF_ABI_CHANGE,
+    "data/test-abidiff-exit/qualifier-typedef-array-report-1.txt",
+    "output/test-abidiff-exit/qualifier-typedef-array-report-1.txt"
+  },
+  {
+    "data/test-abidiff-exit/qualifier-typedef-array-v0.o",
+    "data/test-abidiff-exit/qualifier-typedef-array-v1.o",
+    "",
+    "",
+    "",
+    "--leaf-changes-only",
+    abigail::tools_utils::ABIDIFF_OK,
+    "data/test-abidiff-exit/qualifier-typedef-array-report-2.txt",
+    "output/test-abidiff-exit/qualifier-typedef-array-report-2.txt"
+  },
+  {
+    "data/test-abidiff-exit/qualifier-typedef-array-v0.o",
+    "data/test-abidiff-exit/qualifier-typedef-array-v1.o",
+    "",
+    "",
+    "",
+    "--harmless --leaf-changes-only",
+    abigail::tools_utils::ABIDIFF_OK,
+    "data/test-abidiff-exit/qualifier-typedef-array-report-3.txt",
+    "output/test-abidiff-exit/qualifier-typedef-array-report-3.txt"
+  },
   {0, 0, 0 ,0, 0, 0, abigail::tools_utils::ABIDIFF_OK, 0, 0}
 };
 
