// RUN: %clang_cc1 %s -std=c++11 -triple=x86_64-apple-darwin10 -emit-llvm -o %t.ll
// RUN: FileCheck %s -check-prefix=FUNS < %t.ll
// RUN: FileCheck %s -check-prefix=VARS < %t.ll
// RUN: %clang_cc1 %s -std=c++11 -triple=x86_64-apple-darwin10 -fvisibility hidden -emit-llvm -o %t.ll
// RUN: FileCheck %s -check-prefix=FUNS-HIDDEN < %t.ll
// RUN: FileCheck %s -check-prefix=VARS-HIDDEN < %t.ll

#define HIDDEN __attribute__((visibility("hidden")))
#define PROTECTED __attribute__((visibility("protected")))
#define DEFAULT __attribute__((visibility("default")))
#define TYPE_HIDDEN __attribute__((type_visibility("hidden")))
#define TYPE_PROTECTED __attribute__((type_visibility("protected")))
#define TYPE_DEFAULT __attribute__((type_visibility("default")))

// type_visibility is rdar://11880378

#if !__has_attribute(type_visibility)
#error No type_visibility attribute!
#endif

// The template tests come first because IR-gen reorders RTTI wierdly.
namespace temp0 {
  struct A;
  template <class T> struct TYPE_DEFAULT B {
    virtual void foo() {}
  };

  template struct B<A>;
  // FUNS-LABEL:        define weak_odr void @_ZN5temp01BINS_1AEE3fooEv(
  // VARS:        @_ZTVN5temp01BINS_1AEEE = weak_odr unnamed_addr constant
  // VARS:        @_ZTSN5temp01BINS_1AEEE = weak_odr constant
  // VARS:        @_ZTIN5temp01BINS_1AEEE = weak_odr constant
  // FUNS-HIDDEN-LABEL: define weak_odr hidden void @_ZN5temp01BINS_1AEE3fooEv(
  // VARS-HIDDEN: @_ZTVN5temp01BINS_1AEEE = weak_odr hidden unnamed_addr constant
  // VARS-HIDDEN: @_ZTSN5temp01BINS_1AEEE = weak_odr hidden constant
  // VARS-HIDDEN: @_ZTIN5temp01BINS_1AEEE = weak_odr hidden constant
}

namespace temp1 {
  struct TYPE_DEFAULT A;
  template <class T> struct TYPE_DEFAULT B {
    virtual void foo() {}
  };

  template struct B<A>;
  // FUNS-LABEL:        define weak_odr void @_ZN5temp11BINS_1AEE3fooEv(
  // VARS:        @_ZTVN5temp11BINS_1AEEE = weak_odr unnamed_addr constant
  // VARS:        @_ZTSN5temp11BINS_1AEEE = weak_odr constant
  // VARS:        @_ZTIN5temp11BINS_1AEEE = weak_odr constant
  // FUNS-HIDDEN-LABEL: define weak_odr hidden void @_ZN5temp11BINS_1AEE3fooEv(
  // VARS-HIDDEN: @_ZTVN5temp11BINS_1AEEE = weak_odr unnamed_addr constant
  // VARS-HIDDEN: @_ZTSN5temp11BINS_1AEEE = weak_odr constant
  // VARS-HIDDEN: @_ZTIN5temp11BINS_1AEEE = weak_odr constant
}

namespace temp2 {
  struct TYPE_DEFAULT A;
  template <class T> struct B {
    virtual void foo() {}
  };

  template struct B<A>;
  // FUNS-LABEL:        define weak_odr void @_ZN5temp21BINS_1AEE3fooEv(
  // VARS:        @_ZTVN5temp21BINS_1AEEE = weak_odr unnamed_addr constant
  // VARS:        @_ZTSN5temp21BINS_1AEEE = weak_odr constant
  // VARS:        @_ZTIN5temp21BINS_1AEEE = weak_odr constant
  // FUNS-HIDDEN-LABEL: define weak_odr hidden void @_ZN5temp21BINS_1AEE3fooEv(
  // VARS-HIDDEN: @_ZTVN5temp21BINS_1AEEE = weak_odr hidden unnamed_addr constant
  // VARS-HIDDEN: @_ZTSN5temp21BINS_1AEEE = weak_odr hidden constant
  // VARS-HIDDEN: @_ZTIN5temp21BINS_1AEEE = weak_odr hidden constant
}

namespace temp3 {
  struct TYPE_HIDDEN A;
  template <class T> struct TYPE_DEFAULT B {
    virtual void foo() {}
  };

  template struct B<A>;
  // FUNS-LABEL:        define weak_odr hidden void @_ZN5temp31BINS_1AEE3fooEv(
  // VARS:        @_ZTVN5temp31BINS_1AEEE = weak_odr hidden unnamed_addr constant
  // VARS:        @_ZTSN5temp31BINS_1AEEE = weak_odr hidden constant
  // VARS:        @_ZTIN5temp31BINS_1AEEE = weak_odr hidden constant
  // FUNS-HIDDEN-LABEL: define weak_odr hidden void @_ZN5temp31BINS_1AEE3fooEv(
  // VARS-HIDDEN: @_ZTVN5temp31BINS_1AEEE = weak_odr hidden unnamed_addr constant
  // VARS-HIDDEN: @_ZTSN5temp31BINS_1AEEE = weak_odr hidden constant
  // VARS-HIDDEN: @_ZTIN5temp31BINS_1AEEE = weak_odr hidden constant
}

namespace temp4 {
  struct TYPE_DEFAULT A;
  template <class T> struct TYPE_HIDDEN B {
    virtual void foo() {}
  };

  template struct B<A>;
  // FUNS-LABEL:        define weak_odr void @_ZN5temp41BINS_1AEE3fooEv(
  // VARS:        @_ZTVN5temp41BINS_1AEEE = weak_odr hidden unnamed_addr constant
  // VARS:        @_ZTSN5temp41BINS_1AEEE = weak_odr hidden constant
  // VARS:        @_ZTIN5temp41BINS_1AEEE = weak_odr hidden constant
  // FUNS-HIDDEN-LABEL: define weak_odr hidden void @_ZN5temp41BINS_1AEE3fooEv(
  // VARS-HIDDEN: @_ZTVN5temp41BINS_1AEEE = weak_odr hidden unnamed_addr constant
  // VARS-HIDDEN: @_ZTSN5temp41BINS_1AEEE = weak_odr hidden constant
  // VARS-HIDDEN: @_ZTIN5temp41BINS_1AEEE = weak_odr hidden constant
}

namespace type0 {
  struct TYPE_DEFAULT A {
    virtual void foo();
  };

  void A::foo() {}
  // FUNS-LABEL:        define void @_ZN5type01A3fooEv(
  // VARS:        @_ZTVN5type01AE = unnamed_addr constant
  // VARS:        @_ZTSN5type01AE = constant
  // VARS:        @_ZTIN5type01AE = constant
  // FUNS-HIDDEN-LABEL: define hidden void @_ZN5type01A3fooEv(
  // VARS-HIDDEN: @_ZTVN5type01AE = unnamed_addr constant
  // VARS-HIDDEN: @_ZTSN5type01AE = constant
  // VARS-HIDDEN: @_ZTIN5type01AE = constant
}

namespace type1 {
  struct HIDDEN TYPE_DEFAULT A {
    virtual void foo();
  };

  void A::foo() {}
  // FUNS-LABEL:        define hidden void @_ZN5type11A3fooEv(
  // VARS:        @_ZTVN5type11AE = unnamed_addr constant
  // VARS:        @_ZTSN5type11AE = constant
  // VARS:        @_ZTIN5type11AE = constant
  // FUNS-HIDDEN-LABEL: define hidden void @_ZN5type11A3fooEv(
  // VARS-HIDDEN: @_ZTVN5type11AE = unnamed_addr constant
  // VARS-HIDDEN: @_ZTSN5type11AE = constant
  // VARS-HIDDEN: @_ZTIN5type11AE = constant
}

namespace type2 {
  struct TYPE_HIDDEN A {
    virtual void foo();
  };

  void A::foo() {}
  // FUNS-LABEL:        define void @_ZN5type21A3fooEv(
  // VARS:        @_ZTVN5type21AE = hidden unnamed_addr constant
  // VARS:        @_ZTSN5type21AE = hidden constant
  // VARS:        @_ZTIN5type21AE = hidden constant
  // FUNS-HIDDEN-LABEL: define hidden void @_ZN5type21A3fooEv(
  // VARS-HIDDEN: @_ZTVN5type21AE = hidden unnamed_addr constant
  // VARS-HIDDEN: @_ZTSN5type21AE = hidden constant
  // VARS-HIDDEN: @_ZTIN5type21AE = hidden constant
}

namespace type3 {
  struct DEFAULT TYPE_HIDDEN A {
    virtual void foo();
  };

  void A::foo() {}
  // FUNS-LABEL:        define void @_ZN5type31A3fooEv(
  // VARS:        @_ZTVN5type31AE = hidden unnamed_addr constant
  // VARS:        @_ZTSN5type31AE = hidden constant
  // VARS:        @_ZTIN5type31AE = hidden constant
  // FUNS-HIDDEN-LABEL: define void @_ZN5type31A3fooEv(
  // VARS-HIDDEN: @_ZTVN5type31AE = hidden unnamed_addr constant
  // VARS-HIDDEN: @_ZTSN5type31AE = hidden constant
  // VARS-HIDDEN: @_ZTIN5type31AE = hidden constant
}

