Skip to content

Commit d3f17d4

Browse files
committed
COMP: Move inline = default destructors to .cxx for 30 exported classes
Non-template exported classes with `~ClassName() override = default;` inline in the header have hidden D1Ev/D0Ev destructor thunks under -fvisibility-inlines-hidden, even when the class vtable and typeinfo remain exported. This breaks dynamic_cast across DSO boundaries in shared library builds. Moving the destructor definition out of line to the .cxx file ensures it is compiled in exactly one translation unit, giving it default (exported) visibility and correctly anchoring all destructor thunks. Affected modules: ITKCommon (3), ITKIOImageBase (3), ITKFEM (1), ITKOptimizers (11), ITKStatistics (8), ITKWatersheds (2), ITKVideoCore (1). See: InsightSoftwareConsortium#6000
1 parent fdd8f7f commit d3f17d4

File tree

60 files changed

+87
-30
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

60 files changed

+87
-30
lines changed

Modules/Core/Common/include/itkEquivalencyTable.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ class ITKCommon_EXPORT EquivalencyTable : public DataObject
172172

173173
protected:
174174
EquivalencyTable() = default;
175-
~EquivalencyTable() override = default;
175+
~EquivalencyTable() override;
176176
void
177177
PrintSelf(std::ostream & os, Indent indent) const override;
178178

Modules/Core/Common/include/itkLoggerManager.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ class ITKCommon_EXPORT LoggerManager : public Object
101101
LoggerManager() = default;
102102

103103
/** Destructor */
104-
~LoggerManager() override = default;
104+
~LoggerManager() override;
105105

106106
/** Print contents of a LoggerManager */
107107
void

Modules/Core/Common/include/itkLoggerOutput.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ class ITKCommon_EXPORT LoggerOutput : public OutputWindow
109109

110110
protected:
111111
LoggerOutput() = default;
112-
~LoggerOutput() override = default;
112+
~LoggerOutput() override;
113113
void
114114
PrintSelf(std::ostream & os, Indent indent) const override;
115115

Modules/Core/Common/src/itkEquivalencyTable.cxx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919

2020
namespace itk
2121
{
22+
EquivalencyTable::~EquivalencyTable() = default;
23+
2224
bool
2325
EquivalencyTable::Add(unsigned long a, unsigned long b)
2426
{

Modules/Core/Common/src/itkLoggerManager.cxx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919

2020
namespace itk
2121
{
22+
LoggerManager::~LoggerManager() = default;
23+
2224
/** create a logger and add it into LoggerManager */
2325
LoggerManager::LoggerPointer
2426
LoggerManager::CreateLogger(const NameType & name, PriorityLevelEnum level, PriorityLevelEnum levelForFlushing)

Modules/Core/Common/src/itkLoggerOutput.cxx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929

3030
namespace itk
3131
{
32+
LoggerOutput::~LoggerOutput() = default;
33+
3234
/** Send a string to display. */
3335
void
3436
LoggerOutput::DisplayText(const char * t)

Modules/IO/ImageBase/include/itkArchetypeSeriesFileNames.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ class ITKIOImageBase_EXPORT ArchetypeSeriesFileNames : public Object
108108

109109
protected:
110110
ArchetypeSeriesFileNames();
111-
~ArchetypeSeriesFileNames() override = default;
111+
~ArchetypeSeriesFileNames() override;
112112
void
113113
PrintSelf(std::ostream & os, Indent indent) const override;
114114

Modules/IO/ImageBase/include/itkNumericSeriesFileNames.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ class ITKIOImageBase_EXPORT NumericSeriesFileNames : public Object
102102

103103
protected:
104104
NumericSeriesFileNames();
105-
~NumericSeriesFileNames() override = default;
105+
~NumericSeriesFileNames() override;
106106
void
107107
PrintSelf(std::ostream & os, Indent indent) const override;
108108

Modules/IO/ImageBase/include/itkRegularExpressionSeriesFileNames.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ class ITKIOImageBase_EXPORT RegularExpressionSeriesFileNames : public Object
119119
: m_Directory(".")
120120
, m_RegularExpression(".*\\.([0-9]+)")
121121
{}
122-
~RegularExpressionSeriesFileNames() override = default;
122+
~RegularExpressionSeriesFileNames() override;
123123
void
124124
PrintSelf(std::ostream & os, Indent indent) const override;
125125

Modules/IO/ImageBase/src/itkArchetypeSeriesFileNames.cxx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323

2424
namespace itk
2525
{
26+
ArchetypeSeriesFileNames::~ArchetypeSeriesFileNames() = default;
27+
2628
ArchetypeSeriesFileNames::ArchetypeSeriesFileNames()
2729
: m_Archetype("")
2830
{}

0 commit comments

Comments
 (0)