.dont_resolve_fwds = false,
        },
 },
+{
+       .descr = "dedup: struct <-> fwd resolution w/ hash collision",
+       /*
+        * // CU 1:
+        * struct x;
+        * struct s {
+        *      struct x *x;
+        * };
+        * // CU 2:
+        * struct x {};
+        * struct s {
+        *      struct x *x;
+        * };
+        */
+       .input = {
+               .raw_types = {
+                       /* CU 1 */
+                       BTF_FWD_ENC(NAME_TBD, 0 /* struct fwd */),      /* [1] fwd x      */
+                       BTF_PTR_ENC(1),                                 /* [2] ptr -> [1] */
+                       BTF_STRUCT_ENC(NAME_TBD, 1, 8),                 /* [3] struct s   */
+                               BTF_MEMBER_ENC(NAME_TBD, 2, 0),
+                       /* CU 2 */
+                       BTF_STRUCT_ENC(NAME_TBD, 0, 0),                 /* [4] struct x   */
+                       BTF_PTR_ENC(4),                                 /* [5] ptr -> [4] */
+                       BTF_STRUCT_ENC(NAME_TBD, 1, 8),                 /* [6] struct s   */
+                               BTF_MEMBER_ENC(NAME_TBD, 5, 0),
+                       BTF_END_RAW,
+               },
+               BTF_STR_SEC("\0x\0s\0x\0x\0s\0x\0"),
+       },
+       .expect = {
+               .raw_types = {
+                       BTF_PTR_ENC(3),                                 /* [1] ptr -> [3] */
+                       BTF_STRUCT_ENC(NAME_TBD, 1, 8),                 /* [2] struct s   */
+                               BTF_MEMBER_ENC(NAME_TBD, 1, 0),
+                       BTF_STRUCT_ENC(NAME_NTH(2), 0, 0),              /* [3] struct x   */
+                       BTF_END_RAW,
+               },
+               BTF_STR_SEC("\0s\0x"),
+       },
+       .opts = {
+               .dont_resolve_fwds = false,
+               .dedup_table_size = 1, /* force hash collisions */
+       },
+},
 {
        .descr = "dedup: all possible kinds (no duplicates)",
        .input = {