+2021-03-18  Nick Alcock  <nick.alcock@oracle.com>
+
+       * testsuite/ld-ctf/slice.c: Check slices of enums too.
+       * testsuite/ld-ctf/slice.d: Results adjusted.
+
 2021-03-16  Nick Clifton  <nickc@redhat.com>
 
        * pe-dll.c (pe_find_cdecl_alias_match): Use memmove to overwrite
 
+enum foo { FOO_BAR };
+
 struct slices {
   int one : 1;
   int two : 2;
   int six : 6;
   int ten :10;
+  enum foo bar:1;
 } slices; 
 
     Compilation unit name: .*slice.c
 #...
     Data object section:       .* \(0x4 bytes\)
-    Type section:      .* \(0x9c bytes\)
+    Type section:      .* \(0xd0 bytes\)
     String section:    .*
 #...
   Data objects:
         *\[0x1\] two: ID 0x[0-9a-f]*: \(kind 1\) int:2 \[slice 0x1:0x2\] \(format 0x1\) \(size 0x1\) \(aligned at 0x1\)
         *\[0x3\] six: ID 0x[0-9a-f]*: \(kind 1\) int:6 \[slice 0x3:0x6\] \(format 0x1\) \(size 0x1\) \(aligned at 0x1\)
         *\[0x9\] ten: ID 0x[0-9a-f]*: \(kind 1\) int:10 \[slice 0x9:0xa\] \(format 0x1\) \(size 0x2\) \(aligned at 0x2\)
-
+        *\[0x13\] bar: ID 0x[0-9a-f]*: \(kind 8\) enum foo:1 \[slice 0x13:0x1\] \(format 0x1\) \(size 0x1\) \(aligned at 0x1\)
 #...
 
+2021-03-18  Nick Alcock  <nick.alcock@oracle.com>
+
+       * ctf-types.c (ctf_type_encoding): Support, after a fashion, for enums.
+       * ctf-dump.c (ctf_dump_format_type): Do not report enums' degenerate
+       encoding.
+
 2021-03-18  Nick Alcock  <nick.alcock@oracle.com>
 
        * ctf-dedup.c (ctf_dedup_rhash_type): Report errors on the input
 
       unsliced_kind = ctf_type_kind_unsliced (fp, id);
       kind = ctf_type_kind (fp, id);
 
-      if (ctf_type_encoding (fp, id, &ep) == 0)
+      /* Report encodings of everything with an encoding other than enums:
+        base-type enums cannot have a nonzero cte_offset or cte_bits value.
+        (Slices of them can, but they are of kind CTF_K_SLICE.)  */
+      if (unsliced_kind != CTF_K_ENUM && ctf_type_encoding (fp, id, &ep) == 0)
        {
          if ((ssize_t) ep.cte_bits != ctf_type_size (fp, id) * CHAR_BIT
              && flag & CTF_FT_BITFIELD)
 
   return (ctf_set_errno (ofp, ECTF_NOTYPE));
 }
 
-/* Return the encoding for the specified INTEGER or FLOAT.  */
+/* Return the encoding for the specified INTEGER, FLOAT, or ENUM.  */
 
 int
 ctf_type_encoding (ctf_dict_t *fp, ctf_id_t type, ctf_encoding_t *ep)
       ep->cte_offset = CTF_FP_OFFSET (data);
       ep->cte_bits = CTF_FP_BITS (data);
       break;
+    case CTF_K_ENUM:
+      /* v3 only: we must guess at the underlying integral format.  */
+      ep->cte_format = CTF_INT_SIGNED;
+      ep->cte_offset = 0;
+      ep->cte_bits = 0;
+      break;
     case CTF_K_SLICE:
       {
        const ctf_slice_t *slice;