module XA {
  header "a.h"
}

module XB {
  module B { header "b.h" }
}

module XC {
  header "c.h"
  use XA
  // Intentionally doesn't use XB to show that -fdecl-use isn't transitive.
}

module XD {
  header "d.h"
  use XA
  // Intentionally doesn't use XB to show that -fdecl-use isn't transitive.
}

module XE {
  header "e.h"
  header "unavailable.h"
  use XA
  use XB
}

module XF {
  header "f.h"
  header "unavailable.h"
  use XA
  use XB
}

module XG {
  header "g.h"
  header "g1.h"
  use XC
  use XE
  use XJ
  use XK
  use XN
}

module XH {
  module H { header "h.h" }
  header "h1.h"
  header "s.h"
  use XC
  use XE
}

module XJ {
  header "j.h"
}

module XK {
  textual header "k.h"
}

module XL {
  textual header "l.h"
}

module XM {
  private textual header "m.h"
  textual header "m2.h"
}

module XN {
  module sub {
    header "sub.h"
  }
}

module XS {
}