Skip to content

Commit 017b8bf

Browse files
committed
[cling] Add test for template unloading
1 parent fd7ac5f commit 017b8bf

File tree

5 files changed

+37
-0
lines changed

5 files changed

+37
-0
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/inc)
2+
3+
ROOTTEST_GENERATE_REFLEX_DICTIONARY(TemplateRedecl
4+
inc/RedeclTrigger.h
5+
SELECTION inc/redecl_selection.xml
6+
FIXTURES_SETUP root-meta-redeclUnload-TemplateRedecl-fixture)
7+
8+
ROOTTEST_ADD_TEST(templateRedeclUnload
9+
MACRO testTemplateRedeclUnload.C
10+
ROOTEXE_OPTS -e "gInterpreter->AddIncludePath(\"-I${CMAKE_CURRENT_SOURCE_DIR}\")"
11+
OUTREF TemplateRedeclUnload.ref
12+
FIXTURES_REQUIRED root-meta-redeclUnload-TemplateRedecl-fixture)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// Two wrappers are needed to reproduce the assertion with broken redecl chain.
2+
template <typename T>
3+
class Wrapper1 {};
4+
template <typename T>
5+
class Wrapper2 {};
6+
7+
class RandomClass {};
8+
Wrapper1<Wrapper2<RandomClass>> var;
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<lcgdict>
2+
<class name="RandomClass" splitLevel="0"/>
3+
<class name="Wrapper1<Wrapper2<RandomClass>>" splitLevel="0"/>
4+
</lcgdict>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
void testTemplateRedeclUnload()
2+
{
3+
gROOT->ProcessLine("gSystem->Load(\"libTemplateRedecl_dictrflx\");");
4+
gROOT->ProcessLine("gInterpreter->AutoParse(\"RandomClass\");");
5+
6+
// Undo the last 2 commands, which unloads the templates.
7+
gROOT->ProcessLine(".undo 2");
8+
9+
// Before the fix: cling crashes here with:
10+
// "Passed first decl twice, invalid redecl chain!"
11+
gROOT->ProcessLine("RandomClass obj;");
12+
}

0 commit comments

Comments
 (0)