aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/glsl
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2021-05-20 09:37:15 +0200
committerEike Ziller <eike.ziller@qt.io>2021-05-20 13:22:31 +0000
commite4db67b523732bd315e4a8e395e3a2a7d86ddd74 (patch)
tree3a064a7a5eb8ab94ebbd5fbc1bad679db069f279 /src/libs/glsl
parent76d8483d16a6d3eb03d8676f9a2942cbd4853ae9 (diff)
GLSL: Fix crash when built with Qt 6
In Qt 6 references (and pointers) to elements in a container are invalidated when the container size changes. Simply move to std::unordered_set which guarantees references to stay valid. Fixes: QTCREATORBUG-25641 Task-number: QTCREATORBUG-24098 Change-Id: I9f1110419bd2940c182b4a24629d9ab718ca2af6 Reviewed-by: David Schulz <david.schulz@qt.io>
Diffstat (limited to 'src/libs/glsl')
-rw-r--r--src/libs/glsl/glslengine.cpp12
-rw-r--r--src/libs/glsl/glslengine.h11
2 files changed, 12 insertions, 11 deletions
diff --git a/src/libs/glsl/glslengine.cpp b/src/libs/glsl/glslengine.cpp
index 8c03b69d79..9e305f07f2 100644
--- a/src/libs/glsl/glslengine.cpp
+++ b/src/libs/glsl/glslengine.cpp
@@ -87,30 +87,30 @@ Engine::~Engine()
const QString *Engine::identifier(const QString &s)
{
- return &(*_identifiers.insert(s));
+ return &(*_identifiers.insert(s).first);
}
const QString *Engine::identifier(const char *s, int n)
{
- return &(*_identifiers.insert(QString::fromLatin1(s, n)));
+ return &(*_identifiers.insert(QString::fromLatin1(s, n)).first);
}
-QSet<QString> Engine::identifiers() const
+std::unordered_set<QString> Engine::identifiers() const
{
return _identifiers;
}
const QString *Engine::number(const QString &s)
{
- return &(*_numbers.insert(s));
+ return &(*_numbers.insert(s).first);
}
const QString *Engine::number(const char *s, int n)
{
- return &(*_numbers.insert(QString::fromLatin1(s, n)));
+ return &(*_numbers.insert(QString::fromLatin1(s, n)).first);
}
-QSet<QString> Engine::numbers() const
+std::unordered_set<QString> Engine::numbers() const
{
return _numbers;
}
diff --git a/src/libs/glsl/glslengine.h b/src/libs/glsl/glslengine.h
index 0942d5ef57..1444867131 100644
--- a/src/libs/glsl/glslengine.h
+++ b/src/libs/glsl/glslengine.h
@@ -29,9 +29,10 @@
#include "glslmemorypool.h"
#include "glsltypes.h"
#include <qstring.h>
-#include <qset.h>
+
#include <functional>
#include <set>
+#include <unordered_set>
namespace GLSL {
@@ -91,11 +92,11 @@ public:
const QString *identifier(const QString &s);
const QString *identifier(const char *s, int n);
- QSet<QString> identifiers() const;
+ std::unordered_set<QString> identifiers() const;
const QString *number(const QString &s);
const QString *number(const char *s, int n);
- QSet<QString> numbers() const;
+ std::unordered_set<QString> numbers() const;
// types
const UndefinedType *undefinedType();
@@ -128,8 +129,8 @@ public:
void error(int line, const QString &message);
private:
- QSet<QString> _identifiers;
- QSet<QString> _numbers;
+ std::unordered_set<QString> _identifiers;
+ std::unordered_set<QString> _numbers;
TypeTable<VectorType> _vectorTypes;
TypeTable<MatrixType> _matrixTypes;
TypeTable<ArrayType> _arrayTypes;