Home | History | Annotate | Download | only in CodeGenCXX
      1 // RUN: %clang_cc1 -emit-llvm -triple %itanium_abi_triple -g %s -o - -fstandalone-debug | FileCheck %s
      2 namespace __pointer_type_imp
      3 {
      4   template <class _Tp, class _Dp, bool > struct __pointer_type1 {};
      5 
      6   // CHECK: metadata ![[PARAMS:[0-9]+]], metadata !"_ZTSN18__pointer_type_imp15__pointer_type1I1C14default_deleteIS1_ELb0EEE"} ; [ DW_TAG_structure_type ] [__pointer_type1<C, default_delete<C>, false>] [line [[@LINE+1]], size 8, align 8, offset 0] [def] [from ]
      7   template <class _Tp, class _Dp> struct __pointer_type1<_Tp, _Dp, false>
      8   {
      9     typedef _Tp* type;
     10   };
     11 }
     12 template <class _Tp, class _Dp>
     13 struct __pointer_type2
     14 {
     15   // Test that the bool template type parameter is emitted.
     16   //
     17   // CHECK: ![[PARAMS]] = metadata !{metadata !{{.*}}, metadata !{{.*}}, metadata ![[FALSE:[0-9]+]]}
     18   // CHECK: ![[FALSE]] = {{.*}} i8 0, {{.*}}} ; [ DW_TAG_template_value_parameter ]
     19   typedef typename __pointer_type_imp::__pointer_type1<_Tp, _Dp, false>::type type;
     20 };
     21 template <class _Tp> struct default_delete {};
     22 template <class _Tp, class _Dp = default_delete<_Tp> > class unique_ptr
     23 {
     24   typedef typename __pointer_type2<_Tp, _Dp>::type pointer;
     25   unique_ptr(pointer __p, _Dp __d) {}
     26 };
     27 class C {
     28   unique_ptr<C> Ptr;
     29 };
     30 void foo(C &c) {
     31 }
     32