Mercurial > hg > CbC > CbC_llvm
view clang/test/Frontend/ftime-report-template-decl.cpp @ 150:1d019706d866
LLVM10
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 15:10:13 +0900 |
parents | |
children |
line wrap: on
line source
// RUN: %clang_cc1 %s -emit-llvm -o - -ftime-report 2>&1 | FileCheck %s // RUN: %clang_cc1 %s -emit-llvm -o - -fdelayed-template-parsing -DDELAYED_TEMPLATE_PARSING -ftime-report 2>&1 | FileCheck %s // Template function declarations template <typename T> void foo(); template <typename T, typename U> void foo(); // Template function definitions. template <typename T> void foo() {} // Template class (forward) declarations template <typename T> struct A; template <typename T, typename U> struct b; template <typename> struct C; template <typename, typename> struct D; // Forward declarations with default parameters? template <typename T = int> class X1; template <typename = int> class X2; // Forward declarations w/template template parameters template <template <typename> class T> class TTP1; template <template <typename> class> class TTP2; template <template <typename X, typename Y> class T> class TTP5; // Forward declarations with non-type params template <int> class NTP0; template <int N> class NTP1; template <int N = 5> class NTP2; template <int = 10> class NTP3; template <unsigned int N = 12u> class NTP4; template <unsigned int = 12u> class NTP5; template <unsigned = 15u> class NTP6; template <typename T, T Obj> class NTP7; // Template class declarations template <typename T> struct A {}; template <typename T, typename U> struct B {}; namespace PR6184 { namespace N { template <typename T> void bar(typename T::x); } template <typename T> void N::bar(typename T::x) {} } // This PR occurred only in template parsing mode. namespace PR17637 { template <int> struct L { template <typename T> struct O { template <typename U> static void Fun(U); }; }; template <int k> template <typename T> template <typename U> void L<k>::O<T>::Fun(U) {} void Instantiate() { L<0>::O<int>::Fun(0); } } namespace explicit_partial_specializations { typedef char (&oneT)[1]; typedef char (&twoT)[2]; typedef char (&threeT)[3]; typedef char (&fourT)[4]; typedef char (&fiveT)[5]; typedef char (&sixT)[6]; char one[1]; char two[2]; char three[3]; char four[4]; char five[5]; char six[6]; template <bool b> struct bool_ { typedef int type; }; template <> struct bool_<false> {}; #define XCAT(x, y) x##y #define CAT(x, y) XCAT(x, y) #define sassert(_b_) bool_<(_b_)>::type CAT(var, __LINE__); template <int> struct L { template <typename T> struct O { template <typename U> static oneT Fun(U); }; }; template <int k> template <typename T> template <typename U> oneT L<k>::O<T>::Fun(U) { return one; } template <> template <> template <typename U> oneT L<0>::O<char>::Fun(U) { return one; } void Instantiate() { sassert(sizeof(L<0>::O<int>::Fun(0)) == sizeof(one)); sassert(sizeof(L<0>::O<char>::Fun(0)) == sizeof(one)); } } template <class> struct Foo { template <class _Other> using rebind_alloc = _Other; }; template <class _Alloc> struct _Wrap_alloc { template <class _Other> using rebind_alloc = typename Foo<_Alloc>::template rebind_alloc<_Other>; template <class> using rebind = _Wrap_alloc; }; _Wrap_alloc<int>::rebind<int> w; // CHECK: Miscellaneous Ungrouped Timers // CHECK-DAG: LLVM IR Generation Time // CHECK-DAG: Code Generation Time // CHECK: Total // CHECK: Clang front-end time report // CHECK: Clang front-end timer // CHECK: Total