diff options
author | Eike Ziller <eike.ziller@qt.io> | 2021-05-20 09:37:15 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2021-05-20 13:22:31 +0000 |
commit | e4db67b523732bd315e4a8e395e3a2a7d86ddd74 (patch) | |
tree | 3a064a7a5eb8ab94ebbd5fbc1bad679db069f279 /src/libs/glsl | |
parent | 76d8483d16a6d3eb03d8676f9a2942cbd4853ae9 (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.cpp | 12 | ||||
-rw-r--r-- | src/libs/glsl/glslengine.h | 11 |
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; |