qtdeclarative/tools/qmltc
Michael Weghorn f7a64d2fc0 QmltcCompiler: Adhere to Compare requirement ("!(a < a)")
The Compare requirements [1] say:

> The return value of the function call operation applied to an object of
> a type satisfying Compare, when contextually converted to bool, yields
> true if the first argument of the call appears before the second in the
> strict weak ordering relation induced by this type, and false otherwise.

That requirement was violated here, because passing
the same value for both arguments would return true,
since the

    inlineComponentB->inherits(inlineComponentA)

check returns true when both inline components
are the same.

Add an equality check to fix that.

Fixes a build failure when building with
CXXFLAGS='-D_GLIBCXX_DEBUG':

    /usr/include/c++/13/bits/stl_algo.h:4892:
    In function:
        void std::sort(_RAIter, _RAIter, _Compare) [with _RAIter =
        QList<variant<QString, monostate> >::iterator; _Compare =
        QmltcCompiler::compile(const QmltcCompilerInfo&)::<lambda(const
        QmltcCompiler::InlineComponentOrDocumentRootName&, const
        QmltcCompiler::InlineComponentOrDocumentRootName&)>]

    Error: comparison doesn't meet irreflexive requirements, assert(!(a < a)).

    Objects involved in the operation:
        instance "functor" @ 0x7ffec14329f8 {
          type = QmltcCompiler::compile(QmltcCompilerInfo const&)::{lambda(std::variant<QString, std::monostate> const&, std::variant<QString, std::monostate> const&)#1};
        }
        iterator::value_type "ordered type"  {
          type = std::variant<QString, std::monostate>;
        }
    Aborted (core dumped)
    ninja: build stopped: subcommand failed.

GDB backtrace:

    Program terminated with signal SIGABRT, Aborted.
    #0  __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44
    44      ./nptl/pthread_kill.c: No such file or directory.
    (gdb) bt
    #0  __pthread_kill_implementation (threadid=<optimized out>, signo=signo@entry=6, no_tid=no_tid@entry=0) at ./nptl/pthread_kill.c:44
    #1  0x00007fbe6b4a815f in __pthread_kill_internal (signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:78
    #2  0x00007fbe6b45a472 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
    #3  0x00007fbe6b4444b2 in __GI_abort () at ./stdlib/abort.c:79
    #4  0x00007fbe6b6a300d in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6
    #5  0x0000560ae899bec4 in std::sort<QList<std::variant<QString, std::monostate> >::iterator, QmltcCompiler::compile(const QmltcCompilerInfo&)::<lambda(const QmltcCompiler::InlineComponentOrDocumentRootName&, const QmltcCompiler::InlineComponentOrDocumentRootName&)> >(QList<std::variant<QString, std::monostate> >::iterator, QList<std::variant<QString, std::monostate> >::iterator, struct {...}) (__first=..., __last=..., __comp=...)
        at /usr/include/c++/13/bits/stl_algo.h:4892
    #6  0x0000560ae898bd67 in QmltcCompiler::compile (this=0x7ffec1432e80, info=...) at /home/michi/development/git/qt5/qtdeclarative/tools/qmltc/qmltccompiler.cpp:85
    #7  0x0000560ae89264b6 in main (argc=23, argv=0x7ffec1434fc8) at /home/michi/development/git/qt5/qtdeclarative/tools/qmltc/main.cpp:284

[1] https://en.cppreference.com/w/cpp/named_req/Compare

Change-Id: Ie8934b8381ef217c1f8860ee110f6fa2aa0c86fa
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Reviewed-by: Sami Shalayel <sami.shalayel@qt.io>
2023-12-08 13:14:50 +01:00
..
CMakeLists.txt Doc: Rename and rephrase pages for QML {script|type} compiler 2023-03-28 20:54:27 +02:00
main.cpp QmlCompiler: Make LoggerCategory private again 2023-08-30 14:18:17 +02:00
qmltccodewriter.cpp QQmlSA: Create an abstraction layer for static analysis 2023-05-30 13:42:35 +02:00
qmltccodewriter.h qmltc: export generated classes 2023-02-02 18:11:07 +01:00
qmltccommandlineutils.cpp Port from container::count() and length() to size() 2022-10-07 23:38:48 +02:00
qmltccommandlineutils.h Use SPDX license identifiers 2022-06-11 08:05:15 +02:00
qmltccompiler.cpp QmltcCompiler: Adhere to Compare requirement ("!(a < a)") 2023-12-08 13:14:50 +01:00
qmltccompiler.h QQmlSA: Create an abstraction layer for static analysis 2023-05-30 13:42:35 +02:00
qmltccompilerpieces.cpp qmltc: Pacify the code checker 2023-11-23 18:58:11 +01:00
qmltccompilerpieces.h qmllint: Fix attached property re-use detection 2023-02-14 13:32:13 +01:00
qmltcoutputir.h QQmlSA: Create an abstraction layer for static analysis 2023-05-30 13:42:35 +02:00
qmltcoutputprimitives.h Address TODOs in qmltc tool 2022-07-28 14:58:43 +02:00
qmltcpropertyutils.h Replace signal name manipulations with QQmlSignalNames 2023-08-15 12:13:31 +00:00
qmltctyperesolver.cpp Use SPDX license identifiers 2022-06-11 08:05:15 +02:00
qmltctyperesolver.h Address TODOs in qmltc tool 2022-07-28 14:58:43 +02:00
qmltcvisitor.cpp QmltcVisitor: Fix sort order of array used with std::binary_search 2023-12-08 13:14:46 +01:00
qmltcvisitor.h QQmlSA: Create an abstraction layer for static analysis 2023-05-30 13:42:35 +02:00