summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@kdab.com>2016-07-07 10:57:03 +0200
committerMarc Mutz <marc.mutz@kdab.com>2016-07-12 06:38:56 +0000
commitd91d3536eb82075aec25f3772c4209e15b7b3060 (patch)
tree3e78419f4e2bd9e038ff2e1fa5d6639cc4b26d77
parent71ca09a07d1b5adf3eeefd3790250481781ba166 (diff)
downloadqtxmlpatterns-d91d3536eb82075aec25f3772c4209e15b7b3060.tar.gz
Unbreak ubsan developer-build
GCC's undefined-behavior sanitizer checks that the declared type of the object is a base class of the dynamic type of the object on each access to a member of a class type. It therefore requires the typeinfo for these types, which for polymorphic types is emitted in the TU where the vtable is emitted, too. QtPatternist::AtomicValue is a polymorphic non- exported class, so this failed at link-time. Ditto for the other cases. Fix by autotest-exporting the classes. Also, where applicable, de-inline the dtors, so the vtable (and typeinfo) are pinned to one TU. Change-Id: I5c47be779a3833433a7108a79a57d61a93ab5494 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
-rw-r--r--src/xmlpatterns/data/qitem_p.h3
-rw-r--r--src/xmlpatterns/expr/qgeneralcomparison.cpp5
-rw-r--r--src/xmlpatterns/expr/qgeneralcomparison_p.h5
-rw-r--r--src/xmlpatterns/expr/qnamespaceconstructor.cpp5
-rw-r--r--src/xmlpatterns/expr/qnamespaceconstructor_p.h3
-rw-r--r--src/xmlpatterns/expr/qpath.cpp5
-rw-r--r--src/xmlpatterns/expr/qpath_p.h3
-rw-r--r--src/xmlpatterns/expr/qsinglecontainer.cpp5
-rw-r--r--src/xmlpatterns/expr/qsinglecontainer_p.h4
-rw-r--r--src/xmlpatterns/expr/qtemplate.cpp5
-rw-r--r--src/xmlpatterns/expr/qtemplate_p.h4
-rw-r--r--src/xmlpatterns/expr/qvaluecomparison.cpp5
-rw-r--r--src/xmlpatterns/expr/qvaluecomparison_p.h5
-rw-r--r--src/xmlpatterns/expr/qvariablereference.cpp5
-rw-r--r--src/xmlpatterns/expr/qvariablereference_p.h3
-rw-r--r--src/xmlpatterns/functions/qfunctionfactory_p.h2
-rw-r--r--src/xmlpatterns/type/qitemtype_p.h2
-rw-r--r--src/xmlpatterns/type/qsequencetype_p.h2
18 files changed, 56 insertions, 15 deletions
diff --git a/src/xmlpatterns/data/qitem_p.h b/src/xmlpatterns/data/qitem_p.h
index c89add1..c5a168d 100644
--- a/src/xmlpatterns/data/qitem_p.h
+++ b/src/xmlpatterns/data/qitem_p.h
@@ -105,8 +105,7 @@ namespace QPatternist
* @ingroup Patternist_xdm
* @author Frans Englich <frans.englich@nokia.com>
*/
- class AtomicValue : public QSharedData
- , public CppCastingHelper<AtomicValue>
+ class Q_AUTOTEST_EXPORT AtomicValue : public QSharedData, public CppCastingHelper<AtomicValue>
{
public:
virtual ~AtomicValue();
diff --git a/src/xmlpatterns/expr/qgeneralcomparison.cpp b/src/xmlpatterns/expr/qgeneralcomparison.cpp
index d11b130..1c2ca4c 100644
--- a/src/xmlpatterns/expr/qgeneralcomparison.cpp
+++ b/src/xmlpatterns/expr/qgeneralcomparison.cpp
@@ -56,6 +56,11 @@ GeneralComparison::GeneralComparison(const Expression::Ptr &op1,
{
}
+/*! \internal */
+GeneralComparison::~GeneralComparison()
+{
+}
+
bool GeneralComparison::generalCompare(const Item &op1,
const Item &op2,
const DynamicContext::Ptr &context) const
diff --git a/src/xmlpatterns/expr/qgeneralcomparison_p.h b/src/xmlpatterns/expr/qgeneralcomparison_p.h
index f4bbed3..6a66fa9 100644
--- a/src/xmlpatterns/expr/qgeneralcomparison_p.h
+++ b/src/xmlpatterns/expr/qgeneralcomparison_p.h
@@ -64,8 +64,8 @@ namespace QPatternist
* @author Frans Englich <frans.englich@nokia.com>
* @ingroup Patternist_expressions
*/
- class GeneralComparison : public PairContainer,
- public ComparisonPlatform<GeneralComparison,
+ class Q_AUTOTEST_EXPORT GeneralComparison
+ : public PairContainer, public ComparisonPlatform<GeneralComparison,
true /* We want to report errors. */,
AtomicComparator::AsGeneralComparison>
{
@@ -74,6 +74,7 @@ namespace QPatternist
const AtomicComparator::Operator op,
const Expression::Ptr &op2,
const bool isBackwardsCompat = false);
+ ~GeneralComparison();
virtual bool evaluateEBV(const DynamicContext::Ptr &) const;
virtual Expression::Ptr typeCheck(const StaticContext::Ptr &context,
diff --git a/src/xmlpatterns/expr/qnamespaceconstructor.cpp b/src/xmlpatterns/expr/qnamespaceconstructor.cpp
index b9ed98b..882f9c0 100644
--- a/src/xmlpatterns/expr/qnamespaceconstructor.cpp
+++ b/src/xmlpatterns/expr/qnamespaceconstructor.cpp
@@ -44,6 +44,11 @@ NamespaceConstructor::NamespaceConstructor(const QXmlName nb) : m_binding(nb)
Q_ASSERT(!m_binding.isNull());
}
+/*! \internal */
+NamespaceConstructor::~NamespaceConstructor()
+{
+}
+
void NamespaceConstructor::evaluateToSequenceReceiver(const DynamicContext::Ptr &context) const
{
context->outputReceiver()->namespaceBinding(m_binding);
diff --git a/src/xmlpatterns/expr/qnamespaceconstructor_p.h b/src/xmlpatterns/expr/qnamespaceconstructor_p.h
index 1ac1b5d..6a025a1 100644
--- a/src/xmlpatterns/expr/qnamespaceconstructor_p.h
+++ b/src/xmlpatterns/expr/qnamespaceconstructor_p.h
@@ -57,10 +57,11 @@ namespace QPatternist
* @author Frans Englich <frans.englich@nokia.com>
* @ingroup Patternist_expressions
*/
- class NamespaceConstructor : public EmptyContainer
+ class Q_AUTOTEST_EXPORT NamespaceConstructor : public EmptyContainer
{
public:
NamespaceConstructor(const QXmlName nb);
+ ~NamespaceConstructor();
virtual void evaluateToSequenceReceiver(const DynamicContext::Ptr &context) const;
diff --git a/src/xmlpatterns/expr/qpath.cpp b/src/xmlpatterns/expr/qpath.cpp
index 4d1e42c..0128cf3 100644
--- a/src/xmlpatterns/expr/qpath.cpp
+++ b/src/xmlpatterns/expr/qpath.cpp
@@ -55,6 +55,11 @@ Path::Path(const Expression::Ptr &operand1,
{
}
+/*! \internal */
+Path::~Path()
+{
+}
+
Item::Iterator::Ptr Path::mapToSequence(const Item &item,
const DynamicContext::Ptr &context) const
{
diff --git a/src/xmlpatterns/expr/qpath_p.h b/src/xmlpatterns/expr/qpath_p.h
index 687fafb..51b5728 100644
--- a/src/xmlpatterns/expr/qpath_p.h
+++ b/src/xmlpatterns/expr/qpath_p.h
@@ -59,7 +59,7 @@ namespace QPatternist
* @author Frans Englich <frans.englich@nokia.com>
* @ingroup Patternist_expressions
*/
- class Path : public PairContainer
+ class Q_AUTOTEST_EXPORT Path : public PairContainer
{
public:
enum Kind
@@ -88,6 +88,7 @@ namespace QPatternist
Path(const Expression::Ptr &operand1,
const Expression::Ptr &operand2,
const Kind kind = RegularPath);
+ ~Path();
virtual Item::Iterator::Ptr evaluateSequence(const DynamicContext::Ptr &context) const;
virtual Item evaluateSingleton(const DynamicContext::Ptr &context) const;
diff --git a/src/xmlpatterns/expr/qsinglecontainer.cpp b/src/xmlpatterns/expr/qsinglecontainer.cpp
index c973313..bf544ab 100644
--- a/src/xmlpatterns/expr/qsinglecontainer.cpp
+++ b/src/xmlpatterns/expr/qsinglecontainer.cpp
@@ -45,6 +45,11 @@ SingleContainer::SingleContainer(const Expression::Ptr &operand) : m_operand(ope
Q_ASSERT(operand);
}
+/*! \internal */
+SingleContainer::~SingleContainer()
+{
+}
+
Expression::List SingleContainer::operands() const
{
Expression::List list;
diff --git a/src/xmlpatterns/expr/qsinglecontainer_p.h b/src/xmlpatterns/expr/qsinglecontainer_p.h
index baf061c..3dbfb80 100644
--- a/src/xmlpatterns/expr/qsinglecontainer_p.h
+++ b/src/xmlpatterns/expr/qsinglecontainer_p.h
@@ -56,9 +56,11 @@ namespace QPatternist
* @author Frans Englich <frans.englich@nokia.com>
* @ingroup Patternist_expressions
*/
- class SingleContainer : public Expression
+ class Q_AUTOTEST_EXPORT SingleContainer : public Expression
{
public:
+ ~SingleContainer();
+
virtual Expression::List operands() const;
virtual void setOperands(const Expression::List &operands);
diff --git a/src/xmlpatterns/expr/qtemplate.cpp b/src/xmlpatterns/expr/qtemplate.cpp
index a5cd165..3d5d948 100644
--- a/src/xmlpatterns/expr/qtemplate.cpp
+++ b/src/xmlpatterns/expr/qtemplate.cpp
@@ -40,6 +40,11 @@ QT_BEGIN_NAMESPACE
using namespace QPatternist;
+/*! \internal */
+Template::~Template()
+{
+}
+
const SourceLocationReflection* Template::actualReflection() const
{
return this;
diff --git a/src/xmlpatterns/expr/qtemplate_p.h b/src/xmlpatterns/expr/qtemplate_p.h
index 2cc0eba..84669a8 100644
--- a/src/xmlpatterns/expr/qtemplate_p.h
+++ b/src/xmlpatterns/expr/qtemplate_p.h
@@ -72,8 +72,7 @@ namespace QPatternist
* @ingroup Patternist_expressions
* @since 4.5
*/
- class Template : public QSharedData
- , public SourceLocationReflection
+ class Q_AUTOTEST_EXPORT Template : public QSharedData, public SourceLocationReflection
{
public:
@@ -85,6 +84,7 @@ namespace QPatternist
, m_reqType(reqType)
{
}
+ ~Template();
Expression::Ptr body;
diff --git a/src/xmlpatterns/expr/qvaluecomparison.cpp b/src/xmlpatterns/expr/qvaluecomparison.cpp
index 09ecfef..1726666 100644
--- a/src/xmlpatterns/expr/qvaluecomparison.cpp
+++ b/src/xmlpatterns/expr/qvaluecomparison.cpp
@@ -51,6 +51,11 @@ ValueComparison::ValueComparison(const Expression::Ptr &op1,
{
}
+/*! \internal */
+ValueComparison::~ValueComparison()
+{
+}
+
Item ValueComparison::evaluateSingleton(const DynamicContext::Ptr &context) const
{
const Item it1(m_operand1->evaluateSingleton(context));
diff --git a/src/xmlpatterns/expr/qvaluecomparison_p.h b/src/xmlpatterns/expr/qvaluecomparison_p.h
index c65c74a..37dd3a7 100644
--- a/src/xmlpatterns/expr/qvaluecomparison_p.h
+++ b/src/xmlpatterns/expr/qvaluecomparison_p.h
@@ -64,13 +64,14 @@ namespace QPatternist
* @author Frans Englich <frans.englich@nokia.com>
* @ingroup Patternist_expressions
*/
- class ValueComparison : public PairContainer,
- public ComparisonPlatform<ValueComparison, true>
+ class Q_AUTOTEST_EXPORT ValueComparison
+ : public PairContainer, public ComparisonPlatform<ValueComparison, true>
{
public:
ValueComparison(const Expression::Ptr &op1,
const AtomicComparator::Operator op,
const Expression::Ptr &op2);
+ ~ValueComparison();
virtual Item evaluateSingleton(const DynamicContext::Ptr &) const;
diff --git a/src/xmlpatterns/expr/qvariablereference.cpp b/src/xmlpatterns/expr/qvariablereference.cpp
index ed5ba36..e2c5548 100644
--- a/src/xmlpatterns/expr/qvariablereference.cpp
+++ b/src/xmlpatterns/expr/qvariablereference.cpp
@@ -42,6 +42,11 @@ VariableReference::VariableReference(const VariableSlotID slotP) : m_varSlot(slo
Q_ASSERT(m_varSlot > -1);
}
+/*! \internal */
+VariableReference::~VariableReference()
+{
+}
+
Expression::Properties VariableReference::properties() const
{
return DisableElimination;
diff --git a/src/xmlpatterns/expr/qvariablereference_p.h b/src/xmlpatterns/expr/qvariablereference_p.h
index d8676a6..1ca6ade 100644
--- a/src/xmlpatterns/expr/qvariablereference_p.h
+++ b/src/xmlpatterns/expr/qvariablereference_p.h
@@ -58,7 +58,7 @@ namespace QPatternist
* @author Frans Englich <frans.englich@nokia.com>
* @ingroup Patternist_expressions
*/
- class VariableReference : public EmptyContainer
+ class Q_AUTOTEST_EXPORT VariableReference : public EmptyContainer
{
public:
typedef QExplicitlySharedDataPointer<VariableReference> Ptr;
@@ -70,6 +70,7 @@ namespace QPatternist
* @param slot must be a valid slot. That is, zero or larger.
*/
VariableReference(const VariableSlotID slot);
+ ~VariableReference();
/**
* @returns the slot that this reference communicates through.
diff --git a/src/xmlpatterns/functions/qfunctionfactory_p.h b/src/xmlpatterns/functions/qfunctionfactory_p.h
index 187edad..5759ac0 100644
--- a/src/xmlpatterns/functions/qfunctionfactory_p.h
+++ b/src/xmlpatterns/functions/qfunctionfactory_p.h
@@ -68,7 +68,7 @@ namespace QPatternist
* Language (XPath) 2.0, Definition: Function signatures</a>
* @author Frans Englich <frans.englich@nokia.com>
*/
- class FunctionFactory : public QSharedData
+ class Q_AUTOTEST_EXPORT FunctionFactory : public QSharedData
{
public:
diff --git a/src/xmlpatterns/type/qitemtype_p.h b/src/xmlpatterns/type/qitemtype_p.h
index bea6bc2..7cfad06 100644
--- a/src/xmlpatterns/type/qitemtype_p.h
+++ b/src/xmlpatterns/type/qitemtype_p.h
@@ -69,7 +69,7 @@ namespace QPatternist
* @ingroup Patternist_types
* @author Frans Englich <frans.englich@nokia.com>
*/
- class ItemType : public virtual QSharedData
+ class Q_AUTOTEST_EXPORT ItemType : public virtual QSharedData
{
public:
/**
diff --git a/src/xmlpatterns/type/qsequencetype_p.h b/src/xmlpatterns/type/qsequencetype_p.h
index 0828d58..870972a 100644
--- a/src/xmlpatterns/type/qsequencetype_p.h
+++ b/src/xmlpatterns/type/qsequencetype_p.h
@@ -69,7 +69,7 @@ namespace QPatternist
* @see <a href="http://www.w3.org/TR/xpath20/#id-sequencetype-syntax">XML
* Path Language (XPath) 2.0, 2.5.3 SequenceType Syntax</a>
*/
- class SequenceType : public virtual QSharedData
+ class Q_AUTOTEST_EXPORT SequenceType : public virtual QSharedData
{
public:
inline SequenceType()