Compiler projects using llvm
module c_library [extern_c] { module inner { header "c-header.h" } }
module cxx_library { header "cxx-header.h" requires cplusplus }
module c_library_bad [extern_c] { header "c-header-bad.h" }
module diamond_top { header "diamond_top.h" }
module diamond_left { 
  header "diamond_left.h" 
  export diamond_top
}
module diamond_right { 
  header "diamond_right.h" 
  export diamond_top
}
module diamond_bottom { 
  header "diamond_bottom.h" 
  export *
}
module irgen { header "irgen.h" }
module cxx_irgen_top { header "cxx-irgen-top.h" }
module cxx_irgen_left { header "cxx-irgen-left.h" }
module cxx_irgen_right { header "cxx-irgen-right.h" }
module lookup_left_objc { header "lookup_left.h" }
module lookup_right_objc { header "lookup_right.h" }
module lookup_left_cxx { header "lookup_left.hpp" }
module lookup_right_cxx { header "lookup_right.hpp" }
module module_private_left { header "module_private_left.h" }
module module_private_right { header "module_private_right.h" }
module macros_top { 
  header "macros_top.h" 
  explicit module b { header "macros_top_b.h" }
  explicit module c { header "macros_top_c.h" }
}
module macros_left { 
  header "macros_left.h" 
  export *
}
module macros_right { 
  header "macros_right.h" 
  export *
  explicit module undef {
    header "macros_right_undef.h"
  }
}
module macros_bottom { 
  header "macros_bottom.h" 
  export *
}
module macros { header "macros.h" }
module macros_other { header "macros_other.h" }
module category_top { header "category_top.h" }
module category_left { 
  header "category_left.h" 
  export category_top

  explicit module sub {
    header "category_left_sub.h"
  }
}
module category_right { 
  header "category_right.h" 
  export category_top

  explicit module sub {
    header "category_right_sub.h"
  }
}
module category_bottom { 
  header "category_bottom.h" 
  export category_left
  export category_right
}
module category_other { header "category_other.h" }
module redeclarations_left { header "redeclarations_left.h" }
module redeclarations_right { header "redeclarations_right.h" }
module redecl_namespaces_left { header "redecl_namespaces_left.h" }
module redecl_namespaces_right { header "redecl_namespaces_right.h" }
module redecl_add_after_load_top { header "redecl-add-after-load-top.h" }
module redecl_add_after_load_decls { header "redecl-add-after-load-decls.h" }
module redecl_add_after_load { header "redecl-add-after-load.h" }
module load_failure { header "load_failure.h" }

module decldef {
  explicit module Decl { header "decl.h" }
  explicit module Decl2 { header "decl2.h" }
  explicit module Def { header "def.h" }
}

module redecl_merge_top { 
  header "redecl-merge-top.h"
  explicit module Explicit { header "redecl-merge-top-explicit.h" }
  exclude header "nonexistent.h"
}
module redecl_merge_left { 
  header "redecl-merge-left.h" 
  export *
}
module redecl_merge_left_left { 
  header "redecl-merge-left-left.h" 
  export *
}
module redecl_merge_right { 
  header "redecl-merge-right.h" 
  export *
}
module redecl_merge_bottom { 
  explicit module prefix {
    header "redecl-merge-bottom-prefix.h"
  }

  header "redecl-merge-bottom.h" 
  export *
}
module namespaces_top { 
  header "namespaces-top.h"
  export *
}
module namespaces_left { 
  header "namespaces-left.h"
  export *
}
module namespaces_right { 
  header "namespaces-right.h"
  export *
}
module templates_top { 
  header "templates-top.h"
  export *
}
module templates_left { 
  header "templates-left.h"
  export *
}
module templates_right { 
  header "templates-right.h"
  export *
}
module MethodPoolA {
  header "MethodPoolA.h"

  explicit module Sub2 {
    header "MethodPoolASub2.h"
  }

  explicit module Sub {
    header "MethodPoolASub.h"
  }
}
module MethodPoolB {
  header "MethodPoolB.h"

  explicit module Sub2 {
    header "MethodPoolBSub2.h"
  }

  explicit module Sub {
    header "MethodPoolBSub.h"
  }
}
module import_decl {
  header "import-decl.h"
}

framework module * { 
  exclude NotAModule
}

module linkage_merge_left {
  explicit module sub {
    header "linkage-merge-sub.h"
  }
}

module autolink {
  header "autolink.h"
  link "autolink"

  explicit module sub {
    header "autolink-sub.h"
    link "autolink_sub"
  }

  explicit module sub2 {
    header "autolink-sub2.h"
    link framework "autolink_framework"
  }

  explicit module sub3 {
    header "autolink-sub3.h"
    link "autolink_from_pch"
  }
}

module weird_objc {
  header "weird_objc.h"
}

module objc_type_param {
  header "objc_type_param.h"
}

module ignored_macros {
  header "ignored_macros.h"
}

module cxx_many_overloads {
  header "cxx-many-overloads.h"
}

module cxx_inline_namespace {
  header "cxx-inline-namespace.h"
}

module cxx_inline_namespace_b {
  header "cxx-inline-namespace-b.h"
}

module cxx_linkage_cache {
  header "cxx-linkage-cache.h"
}

module cxx_templates_common {
  header "cxx-templates-common.h"

  explicit module unimported { header "cxx-templates-unimported.h" }
}

module cxx_templates_a {
  header "cxx-templates-a.h"
}

module cxx_templates_b_impl {
  header "cxx-templates-b-impl.h"
}

module cxx_templates_b {
  header "cxx-templates-b.h"
}

module cxx_templates_c {
  header "cxx-templates-c.h"
}

module cxx_templates_d {
  header "cxx-templates-d.h"
}

module cxx_decls {
  module unimported {
    header "cxx-decls-unimported.h"
  }
  module imported {
    header "cxx-decls-imported.h"
  }
}

module cxx_decls_premerged {
  header "cxx-decls-premerged.h"
}

module cxx_decls_merged {
  header "cxx-decls-merged.h"
}

module config {
  header "config.h"
  config_macros [exhaustive] WANT_FOO, WANT_BAR
}

module diag_flags {
  header "diag_flags.h"
}

module diag_pragma {
  header "diag_pragma.h"
}

module pragma_pack {
  module set { header "pragma_pack_set.h" }
  module empty { header "empty.h" }
}

module dummy {
  header "dummy.h"
}

module builtin {
  header "builtin.h"
  explicit module sub {
    header "builtin_sub.h"
  }
}

module linkage_merge {
  explicit module foo {
    header "linkage-merge-foo.h"
  }
  explicit module bar {
    header "linkage-merge-bar.h"
  }

}

module incomplete_mod {
  header "incomplete_mod.h"
}

module warning {
  header "warning.h"
}

module warn_unused_local_typedef {
  header "warn-unused-local-typedef.h"
}

module using_decl {
  module a { header "using-decl-a.h" export * }
  module b { header "using-decl-b.h" export * }
}

module recursive_visibility_a1 {
  module inner { header "recursive_visibility_a1_inner.h" }
}
module recursive_visibility_a2 {
  module inner {
    module more_inner {
      header "recursive_visibility_a2_more_inner.h"
    }
  }
}
module recursive_visibility_b {
  header "recursive_visibility_b.h"
  export *
}
module recursive_visibility_c {
  header "recursive_visibility_c.h"
}
module recursive1 {
  header "recursive1.h"
}
module recursive2 {
  header "recursive2.h"
}
module crash {
  header "crash.h"
}

module DebugCXX {
  header "DebugCXX.h"
}

module DebugObjC {
  header "DebugObjC.h"
}

module DebugObjCImport {
  module SubModule {
    header "DebugObjCImport.h"
  }
}

module DebugDwoId {
  header "DebugDwoId.h"
}

module ImportNameInDir {
  header "ImportNameInDir.h"
  export *
}

module RequiresWithMissingHeader {
  module HeaderBefore {
    header "RequiresWithMissingHeader-Missing1.h"
    requires missing
  }
  module HeaderAfter {
    requires missing
    header "RequiresWithMissingHeader-Missing2.h"
  }
}

module TargetFeatures {
  module arm {
    requires arm
    module aarch32 { requires aarch32 }
    module aarch64 { requires aarch64 }
  }
  module x86 {
    requires x86
    module x86_32 { requires x86_32 }
    module x86_64 { requires x86_64 }
  }
  module riscv {
    requires riscv
    module riscv32 { requires riscv32 }
    module riscv64 { requires riscv64 }
  }
}

module DebugSubmodules {
  module DebugSubmoduleA {
    header "DebugSubmoduleA.h"
    export *
  }
  module DebugSubmoduleB {
    header "DebugSubmoduleB.h"
    export *
  }
}

module ExtensionTestA {
  header "ExtensionTestA.h"
}

module TypedefTag {
  header "typedef-tag.h"
  explicit module Hidden {
    header "typedef-tag-hidden.h"
  }
}

module ElaboratedTypeStructs {
  module Empty {}
  module Structs {
    header "elaborated-type-structs.h"
  }
}

// We import a module, then declare a method with selector stringValue in
// MethodPoolCombined1.h. In MethodPoolCombined2.h, we import another module
// that also contains a method for selector stringValue. We make sure that
// the method pool entry for stringValue in this module is complete.
module MethodPoolCombined {
  header "MethodPoolCombined1.h"
  header "MethodPoolCombined2.h"
}

module MethodPoolString1 {
  header "MethodPoolString1.h"
}

module MethodPoolString2 {
  header "MethodPoolString2.h"
}

module Empty {}

module MacroFabs1 {
  header "MacroFabs1.h"
}

module DiagOutOfDate {
  header "DiagOutOfDate.h"
}

module DebugNestedA {
  header "DebugNestedA.h"
  export *
}

module DebugNestedB {
  header "DebugNestedB.h"
  export *
}

module objcAtKeywordMissingEnd {
  header "objcAtKeywordMissingEnd.h"
}

module innerstructredef {
  module one {
    header "empty.h"
  }
  module two {
   header "innerstructredef.h"
  }
}

module template_nontrivial0 {
  header "template-nontrivial0.h"
  export *
}

module template_nontrivial1 {
  header "template-nontrivial1.h"
  export *
}