text: // RUN: dsymutil -f -oso-prepend-path=%p/../Inputs/modules-pruning \
  // RUN:   -verify \
  // RUN:   -y %p/dummy-debug-map.map -o - \
  // RUN:     | llvm-dwarfdump --name isRef -p - | FileCheck %s
  
  /* Compile with:
     cat >modules.modulemap <<EOF
     module Outer {
       module Template {
         header "template.h"
         export *
       }
     }
  EOF
     clang++ -D TEMPLATE_H -E -o template.h modules-pruning.cpp
     clang++ -c -fcxx-modules -fmodules -fmodule-map-file=modules.modulemap \
       -g -gmodules -fmodules-cache-path=. \
       -Xclang -fdisable-module-hash modules-pruning.cpp -o 1.o
  */
  
  // CHECK: DW_TAG_compile_unit
  // CHECK:   DW_TAG_module
  // CHECK:     DW_TAG_module
  // CHECK:       DW_TAG_class
  // CHECK:         DW_TAG_member
  // CHECK:           DW_AT_name ("isRef")
  // CHECK:           DW_AT_declaration (true)
  // CHECK:           DW_AT_const_value (1)
  // CHECK-NOT: DW_TAG
  
  #ifdef TEMPLATE_H
  
  namespace M {
  struct false_type {
    static const bool value = false;
  };
  struct true_type {
    static const bool value = true;
  };
  
  template <class T> struct is_reference      : false_type {};
  template <class T> struct is_reference<T&>  : true_type {};
  
  template<class T>
  class Template {
  public:
    static const bool isRef = is_reference<T>::value;
    Template() {}
  };
  }
  #else
  
  #include "template.h"
  
  void foo() {
    M::Template<bool&> TB1;
    TB1.isRef;
  }
  
  #endif
  