diff --git a/src/abg-dwarf-reader.cc b/src/abg-dwarf-reader.cc
index 13f1fe61..13c81821 100644
--- a/src/abg-dwarf-reader.cc
+++ b/src/abg-dwarf-reader.cc
@@ -15906,12 +15906,6 @@ get_opaque_version_of_type(read_context	&ctxt,
       && tag != DW_TAG_enumeration_type)
     return result;
 
-  if (tag == DW_TAG_union_type)
-    // TODO: also handle declaration-only unions.  To do that, we mostly
-    // need to adapt add_or_update_union_type to make it schedule
-    // declaration-only unions for resolution too.
-    return result;
-
   string type_name, linkage_name;
   location type_location;
   die_loc_and_name(ctxt, type_die, type_location, type_name, linkage_name);
@@ -15973,6 +15967,7 @@ get_opaque_version_of_type(read_context	&ctxt,
 							    underlying_type,
 							    enumeratorz,
 							    linkage_name));
+	  add_decl_to_scope(enum_type, scope);
 	  result = enum_type;
 	}
     }
diff --git a/tests/data/Makefile.am b/tests/data/Makefile.am
index 68ad902b..a427659d 100644
--- a/tests/data/Makefile.am
+++ b/tests/data/Makefile.am
@@ -1482,6 +1482,13 @@ test-diff-suppr/libtest48-soname-abixml-suppr.txt \
 test-diff-suppr/libtest48-soname-abixml-suppr-2.txt \
 test-diff-suppr/libtest48-soname-abixml-suppr-3.txt \
 test-diff-suppr/libtest48-soname-abixml-suppr-4.txt \
+test-diff-suppr/PR27267/include-dir-v0/include.h \
+test-diff-suppr/PR27267/include-dir-v1/include.h \
+test-diff-suppr/PR27267/v0.c \
+test-diff-suppr/PR27267/v1.c \
+test-diff-suppr/PR27267/libtestpr27267-v0.so \
+test-diff-suppr/PR27267/libtestpr27267-v1.so \
+test-diff-suppr/PR27267/report-1.txt \
 \
 test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1 \
 test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi \
diff --git a/tests/data/test-diff-suppr/PR27267/include-dir-v0/include.h b/tests/data/test-diff-suppr/PR27267/include-dir-v0/include.h
new file mode 100644
index 00000000..0b915537
--- /dev/null
+++ b/tests/data/test-diff-suppr/PR27267/include-dir-v0/include.h
@@ -0,0 +1,8 @@
+enum opaque_enum;
+struct opaque_struct;
+
+typedef enum opaque_enum opaque_enum;
+typedef struct opaque_struct opaque_struct;
+
+void
+fn(opaque_struct *, opaque_enum *e);
diff --git a/tests/data/test-diff-suppr/PR27267/include-dir-v1/include.h b/tests/data/test-diff-suppr/PR27267/include-dir-v1/include.h
new file mode 100644
index 00000000..0b915537
--- /dev/null
+++ b/tests/data/test-diff-suppr/PR27267/include-dir-v1/include.h
@@ -0,0 +1,8 @@
+enum opaque_enum;
+struct opaque_struct;
+
+typedef enum opaque_enum opaque_enum;
+typedef struct opaque_struct opaque_struct;
+
+void
+fn(opaque_struct *, opaque_enum *e);
diff --git a/tests/data/test-diff-suppr/PR27267/libtestpr27267-v0.so b/tests/data/test-diff-suppr/PR27267/libtestpr27267-v0.so
new file mode 100755
index 0000000000000000000000000000000000000000..58df0022f6686c2f3ab34b284a30a91796eec4ec
GIT binary patch
diff --git a/tests/data/test-diff-suppr/PR27267/libtestpr27267-v1.so b/tests/data/test-diff-suppr/PR27267/libtestpr27267-v1.so
new file mode 100755
index 0000000000000000000000000000000000000000..fdf648a5c2494ffd99f87e88bf7e8b385e6ca794
GIT binary patch
diff --git a/tests/data/test-diff-suppr/PR27267/report-1.txt b/tests/data/test-diff-suppr/PR27267/report-1.txt
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/data/test-diff-suppr/PR27267/v0.c b/tests/data/test-diff-suppr/PR27267/v0.c
new file mode 100644
index 00000000..74527dc0
--- /dev/null
+++ b/tests/data/test-diff-suppr/PR27267/v0.c
@@ -0,0 +1,25 @@
+/**
+ *
+ * Compile with:
+ *   gcc -shared -g -Wall -o libtestpr27267-v0.so v0.c
+ *
+ */
+
+#include "include-dir-v0/include.h"
+
+enum opaque_enum
+{
+  e0,
+  e1
+};
+
+struct opaque_struct
+{
+  opaque_enum m0;
+};
+
+void
+fn(opaque_struct * s, opaque_enum *e)
+{
+  s->m0 = *e;
+}
diff --git a/tests/data/test-diff-suppr/PR27267/v1.c b/tests/data/test-diff-suppr/PR27267/v1.c
new file mode 100644
index 00000000..c36d09ae
--- /dev/null
+++ b/tests/data/test-diff-suppr/PR27267/v1.c
@@ -0,0 +1,28 @@
+/**
+ *
+ * Compile with:
+ *   gcc -shared -g -Wall -o libtestpr27267-v1.so v1.c
+ *
+ */
+
+#include "include-dir-v1/include.h"
+
+enum opaque_enum
+{
+  e0,
+  e1,
+  e2
+};
+
+struct opaque_struct
+{
+  opaque_enum m0;
+  opaque_enum m1;
+};
+
+void
+fn(opaque_struct * s, opaque_enum *e)
+{
+  s->m0 = *e;
+  s->m1 = s->m0;
+}
diff --git a/tests/test-diff-suppr.cc b/tests/test-diff-suppr.cc
index c7b73fd6..5b4d08d3 100644
--- a/tests/test-diff-suppr.cc
+++ b/tests/test-diff-suppr.cc
@@ -2026,6 +2026,16 @@ InOutSpec in_out_specs[] =
     "data/test-diff-suppr/libtest48-soname-abixml-report-1.txt",
     "output/test-diff-suppr/libtest48-soname-abixml-report-1_suppr4.txt"
   },
+  {
+    "data/test-diff-suppr/PR27267/libtestpr27267-v0.so",
+    "data/test-diff-suppr/PR27267/libtestpr27267-v1.so",
+    "data/test-diff-suppr/PR27267/include-dir-v0",
+    "data/test-diff-suppr/PR27267/include-dir-v1",
+    "",
+    "--drop-private-types --no-default-suppression",
+    "data/test-diff-suppr/PR27267/report-1.txt",
+    "output/test-diff-suppr/PR27267/report-1.txt"
+  },
   // This should be the last entry
   {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}
 };
