
This patch adds a base-class called TemplateInstantiationObserver which gets notified whenever a template instantiation is entered or exited during semantic analysis. This is a base class used to implement the template profiling and debugging tool called Templight (https://github.com/mikael-s-persson/templight). The patch also makes a few more changes: * ActiveTemplateInstantiation class is moved out of the Sema class (so it can be used with inclusion of Sema.h). * CreateFrontendAction function in front-end utilities is given external linkage (not longer a hidden static function). * TemplateInstObserverChain data member added to Sema class to hold the list of template-inst observers. * Notifications to the template-inst observer are added at the key places where templates are instantiated. Patch by: Abel Sinkovics! Differential Revision: https://reviews.llvm.org/D5767 llvm-svn: 324808
175 lines
6.5 KiB
C++
175 lines
6.5 KiB
C++
// RUN: %clang_cc1 -templight-dump %s 2>&1 | FileCheck %s
|
|
|
|
template <int N>
|
|
struct fib
|
|
{
|
|
static const int value = fib<N-1>::value + fib<N-2>::value;
|
|
};
|
|
|
|
template <>
|
|
struct fib<0>
|
|
{
|
|
static const int value = 1;
|
|
};
|
|
|
|
template <>
|
|
struct fib<1>
|
|
{
|
|
static const int value = 1;
|
|
};
|
|
|
|
// CHECK-LABEL: {{^---$}}
|
|
// CHECK: {{^name:[ ]+'fib<4>'$}}
|
|
// CHECK: {{^kind:[ ]+TemplateInstantiation$}}
|
|
// CHECK: {{^event:[ ]+Begin$}}
|
|
// CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
|
|
// CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:173:8'$}}
|
|
// CHECK-LABEL: {{^---$}}
|
|
// CHECK: {{^name:[ ]+'fib<4>'$}}
|
|
// CHECK: {{^kind:[ ]+TemplateInstantiation$}}
|
|
// CHECK: {{^event:[ ]+End$}}
|
|
// CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
|
|
// CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:173:8'$}}
|
|
// CHECK-LABEL: {{^---$}}
|
|
// CHECK: {{^name:[ ]+'fib<4>'$}}
|
|
// CHECK: {{^kind:[ ]+TemplateInstantiation$}}
|
|
// CHECK: {{^event:[ ]+Begin$}}
|
|
// CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
|
|
// CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:173:8'$}}
|
|
//
|
|
// CHECK-LABEL: {{^---$}}
|
|
// CHECK: {{^name:[ ]+'fib<3>'$}}
|
|
// CHECK: {{^kind:[ ]+TemplateInstantiation$}}
|
|
// CHECK: {{^event:[ ]+Begin$}}
|
|
// CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
|
|
// CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:28'$}}
|
|
// CHECK-LABEL: {{^---$}}
|
|
// CHECK: {{^name:[ ]+'fib<3>'$}}
|
|
// CHECK: {{^kind:[ ]+TemplateInstantiation$}}
|
|
// CHECK: {{^event:[ ]+End$}}
|
|
// CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
|
|
// CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:28'$}}
|
|
// CHECK-LABEL: {{^---$}}
|
|
// CHECK: {{^name:[ ]+'fib<3>'$}}
|
|
// CHECK: {{^kind:[ ]+TemplateInstantiation$}}
|
|
// CHECK: {{^event:[ ]+Begin$}}
|
|
// CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
|
|
// CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:28'$}}
|
|
//
|
|
// CHECK-LABEL: {{^---$}}
|
|
// CHECK: {{^name:[ ]+'fib<2>'$}}
|
|
// CHECK: {{^kind:[ ]+TemplateInstantiation$}}
|
|
// CHECK: {{^event:[ ]+Begin$}}
|
|
// CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
|
|
// CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:28'$}}
|
|
// CHECK-LABEL: {{^---$}}
|
|
// CHECK: {{^name:[ ]+'fib<2>'$}}
|
|
// CHECK: {{^kind:[ ]+TemplateInstantiation$}}
|
|
// CHECK: {{^event:[ ]+End$}}
|
|
// CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
|
|
// CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:28'$}}
|
|
// CHECK-LABEL: {{^---$}}
|
|
// CHECK: {{^name:[ ]+'fib<2>'$}}
|
|
// CHECK: {{^kind:[ ]+TemplateInstantiation$}}
|
|
// CHECK: {{^event:[ ]+Begin$}}
|
|
// CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
|
|
// CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:28'$}}
|
|
|
|
// CHECK-LABEL: {{^---$}}
|
|
// CHECK: {{^name:[ ]+'fib<1>'$}}
|
|
// CHECK: {{^kind:[ ]+Memoization$}}
|
|
// CHECK: {{^event:[ ]+Begin$}}
|
|
// CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:16:8'}}
|
|
// CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:28'$}}
|
|
// CHECK-LABEL: {{^---$}}
|
|
// CHECK: {{^name:[ ]+'fib<1>'$}}
|
|
// CHECK: {{^kind:[ ]+Memoization$}}
|
|
// CHECK: {{^event:[ ]+End$}}
|
|
// CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:16:8'}}
|
|
// CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:28'$}}
|
|
// CHECK-LABEL: {{^---$}}
|
|
// CHECK: {{^name:[ ]+'fib<0>'$}}
|
|
// CHECK: {{^kind:[ ]+Memoization$}}
|
|
// CHECK: {{^event:[ ]+Begin$}}
|
|
// CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:10:8'}}
|
|
// CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:46'$}}
|
|
// CHECK-LABEL: {{^---$}}
|
|
// CHECK: {{^name:[ ]+'fib<0>'$}}
|
|
// CHECK: {{^kind:[ ]+Memoization$}}
|
|
// CHECK: {{^event:[ ]+End$}}
|
|
// CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:10:8'}}
|
|
// CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:46'$}}
|
|
//
|
|
// CHECK-LABEL: {{^---$}}
|
|
// CHECK: {{^name:[ ]+'fib<2>'$}}
|
|
// CHECK: {{^kind:[ ]+TemplateInstantiation$}}
|
|
// CHECK: {{^event:[ ]+End$}}
|
|
// CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
|
|
// CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:28'$}}
|
|
// CHECK-LABEL: {{^---$}}
|
|
// CHECK: {{^name:[ ]+'fib<2>'$}}
|
|
// CHECK: {{^kind:[ ]+Memoization$}}
|
|
// CHECK: {{^event:[ ]+Begin$}}
|
|
// CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
|
|
// CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:28'$}}
|
|
// CHECK-LABEL: {{^---$}}
|
|
// CHECK: {{^name:[ ]+'fib<2>'$}}
|
|
// CHECK: {{^kind:[ ]+Memoization$}}
|
|
// CHECK: {{^event:[ ]+End$}}
|
|
// CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
|
|
// CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:28'$}}
|
|
//
|
|
// CHECK-LABEL: {{^---$}}
|
|
// CHECK: {{^name:[ ]+'fib<1>'$}}
|
|
// CHECK: {{^kind:[ ]+Memoization$}}
|
|
// CHECK: {{^event:[ ]+Begin$}}
|
|
// CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:16:8'}}
|
|
// CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:46'$}}
|
|
// CHECK-LABEL: {{^---$}}
|
|
// CHECK: {{^name:[ ]+'fib<1>'$}}
|
|
// CHECK: {{^kind:[ ]+Memoization$}}
|
|
// CHECK: {{^event:[ ]+End$}}
|
|
// CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:16:8'}}
|
|
// CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:46'$}}
|
|
//
|
|
// CHECK-LABEL: {{^---$}}
|
|
// CHECK: {{^name:[ ]+'fib<3>'$}}
|
|
// CHECK: {{^kind:[ ]+TemplateInstantiation$}}
|
|
// CHECK: {{^event:[ ]+End$}}
|
|
// CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
|
|
// CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:28'$}}
|
|
// CHECK-LABEL: {{^---$}}
|
|
// CHECK: {{^name:[ ]+'fib<3>'$}}
|
|
// CHECK: {{^kind:[ ]+Memoization$}}
|
|
// CHECK: {{^event:[ ]+Begin$}}
|
|
// CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
|
|
// CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:28'$}}
|
|
// CHECK-LABEL: {{^---$}}
|
|
// CHECK: {{^name:[ ]+'fib<3>'$}}
|
|
// CHECK: {{^kind:[ ]+Memoization$}}
|
|
// CHECK: {{^event:[ ]+End$}}
|
|
// CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
|
|
// CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:28'$}}
|
|
//
|
|
// CHECK-LABEL: {{^---$}}
|
|
// CHECK: {{^name:[ ]+'fib<2>'$}}
|
|
// CHECK: {{^kind:[ ]+Memoization$}}
|
|
// CHECK: {{^event:[ ]+Begin$}}
|
|
// CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
|
|
// CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:46'$}}
|
|
// CHECK-LABEL: {{^---$}}
|
|
// CHECK: {{^name:[ ]+'fib<2>'$}}
|
|
// CHECK: {{^kind:[ ]+Memoization$}}
|
|
// CHECK: {{^event:[ ]+End$}}
|
|
// CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
|
|
// CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:6:46'$}}
|
|
// CHECK-LABEL: {{^---$}}
|
|
//
|
|
// CHECK: {{^name:[ ]+'fib<4>'$}}
|
|
// CHECK: {{^kind:[ ]+TemplateInstantiation$}}
|
|
// CHECK: {{^event:[ ]+End$}}
|
|
// CHECK: {{^orig:[ ]+'.*templight-nested-memoization.cpp:4:8'}}
|
|
// CHECK: {{^poi:[ ]+'.*templight-nested-memoization.cpp:173:8'$}}
|
|
fib<4> x;
|
|
|