summaryrefslogtreecommitdiffstats
path: root/src/corelib/global/qcompilerdetection.h
Commit message (Collapse)AuthorAgeFilesLines
* Change copyrights from Nokia to DigiaIikka Eklund2012-09-221-24/+24
| | | | | | | | Change copyrights and license headers from Nokia to Digia Change-Id: If1cc974286d29fd01ec6c19dd4719a67f4c3f00e Reviewed-by: Lars Knoll <lars.knoll@digia.com> Reviewed-by: Sergio Ahumada <sergio.ahumada@digia.com>
* throw() is C++, so don't use it in C modeThiago Macieira2012-09-141-1/+3
| | | | | | | | Q_DECL_NOTHROW is used by qVersion(), which can be extern "C". Change-Id: If71f3bc3a0df3e8321237e5ac9f3bea82380c1e4 Reviewed-by: Qt Doc Bot <qt_docbot@qt-project.org> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
* Add support for the Intel Composer XE 2013.Thiago Macieira2012-09-081-0/+6
| | | | | | | ICC 13.0 adds some new C++11 features that we can now support. Change-Id: Ia870a3bb0172ff124983725300e8f9bf2e325ec6 Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* qcompilerdetection.h: set Q_DECL_OVERRIDE/Q_DECL_FINAL for 2005 <= MSVC <= 2010Marc Mutz2012-08-271-3/+18
| | | | | | | | | This enables Q_DECL_FINAL and Q_DECL_OVERRIDE backed by VC's non-standard extensions from VC 2005 on. VC 2012 will support the standard-compliant version, so use that there. Change-Id: I96874fe3d36fcaa283d2d1f53d5eb6825e55f259 Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* QtGlobal: remove Q_DECL_FINAL_CLASSMarc Mutz2012-08-261-6/+0
| | | | | | | | | | | Now that qvariant_p.h's HasIsNullMethod check is fixed so that it doesn't require Q_COMPILER_DECLTYPE anymore to be able to deal with final classes, there's no point in distinguishing Q_DECL_FINAL and Q_DECL_FINAL_CLASS anymore, so remove the latter. Change-Id: I31de5b63e7d2e44171a13e928997c946d93e05c9 Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* qcompilerdetection.h: add MSVC 2012 featuresMarc Mutz2012-08-261-0/+7
| | | | | | | | These are taken from the table at http://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx Change-Id: Ifd2f88ca5d92092a6a025bef3da36fde0a802a66 Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* qcompilerdetection.h: stream-line MSVC feature detectionMarc Mutz2012-08-261-6/+9
| | | | | | | | | | | | | | | | | Reformat the MSVC feature detection to be similar to other compilers, ie. 1. Inside the C++11 features section instead of where the compilers are detected 2. In one block for the compiler, with sub-blocks for the version. However, it's now not 100% compatible with the previous version, since Q_CC_INTEL is now explicitly excluded while before it was implicitly included in the MSVC case. I have no idea whether that matters, since Q_CC_INTEL is handled for itself further up already. Change-Id: Id9e8da0a5394ad5643bcb29493f14bc6e8264c13 Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* Try to work around GCC 4.6's noexcept bugs, againThiago Macieira2012-08-211-6/+3
| | | | | | | | | | | | | | | | Commit 7315296e9c94c38c842728aed199ac286a3ef174 blacklisted GCC 4.6.0 and 4.6.1 on the grounds that the bug regarding noexcept was fixed in 4.6.2. However, we have evidence of the issue remaining in 4.6.3, so it looks like it was not the issue that the GCC team fixed. For that reason, declare noexcept support in GCC 4.6 fatally broken and enable it only for 4.7. It has been working fine for a month for me on 4.7.1. Change-Id: Ic5a542235867f20657db12e0e809b83522dc7d23 Reviewed-by: Marc Mutz <marc.mutz@kdab.com> Reviewed-by: Sean Harmer <sean.harmer@kdab.com> Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
* Disable C++11 noexcept support in GCC 4.6.0 and 4.6.1Thiago Macieira2012-08-201-0/+5
| | | | | | | | See report: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50309 Change-Id: I5ab3ab1dea42b03ea22dbfbe5f7039c537dabd33 Reviewed-by: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
* Q_DECL_NOTHROW: stronger and more widely available version of Q_DECL_NOEXCEPTMarc Mutz2012-08-071-4/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Commit 1adca807 defined Q_DECL_NOEXCEPT to be the same as throw() for the Microsoft compiler. However, the two are not equivalent: - C++11 noexcept is defined to call std::terminate() if a noexcept function nevertheless encounters an exception. - MSVC throw() has essentially undefined behaviour in this situation: http://msdn.microsoft.com/en-us/library/wfa0edys%28v=vs.100%29 "Due to code optimizations that might be performed by the C++ compiler [...] if a function does throw an exception, the program may not execute correctly." So define two macros: 1. Q_DECL_NOEXCEPT/Q_DECL_NOEXCEPT_EXPR always have C++11 behaviour. This is expected to be the more efficient implementation if the function can actually throw. 2. Q_DECL_NOTHROW means that the function gives the nothrow guarantee. It is stronger than noexcept, but not all functions that can be marked Q_DECL_NOEXCEPT can be marked Q_DECL_NOTHROW. In general Q_DECL_NOTHROW functions need to use a try/catch block in order to prevent exceptions from leaving the functions, unless you can proove that none of the operations can throw. For the caller, both macros are equivalent: it can be relied on that no exception leaves the function. Change-Id: I32f822a82e06a31cb71d38db438387aee5ec3334 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Marius Storm-Olsen <marius.storm-olsen@nokia.com>
* Remove extra Q_COMPILER_xxx defines from the MSVC section.Thiago Macieira2012-08-061-11/+0
| | | | | | | | Those are defined below, after the list that describes the macros and the papers. Change-Id: I1f2df0e33c84eb17ebbb0147662f560defed182c Reviewed-by: Marius Storm-Olsen <marius.storm-olsen@nokia.com>
* MSVC's throw() behaviour matches the C++11 noexcept, so use itThiago Macieira2012-08-061-1/+5
| | | | | | | | | | | | This allows code using methods marked Q_DECL_NOEXCEPT to benefit from optimisations before MSVC supports the C++11 keyword. Even MSVC 2012 doesn't have it yet. Using throw() in other compilers is not a good idea because they might actually be implementing the C++ standard -- which is broken. Change-Id: Id07ab4fe40a641583d5285d5abb536998bc419ba Reviewed-by: Marius Storm-Olsen <marius.storm-olsen@nokia.com>
* QNX: QtGlobal: compile as a C header againMarc Mutz2012-07-091-1/+3
| | | | | | | | | | | <utility> is a C++ header, only execute the check for the Dinkumware standard library if we're compiling under a C++ compiler. Change-Id: I1b24e76f20bfc03b70a330f9da96b4f815106e61 Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com> Reviewed-by: Sean Harmer <sean.harmer@kdab.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* QNX: fix compilation with C++11 enabledMarc Mutz2012-07-031-0/+12
| | | | | | | | | | | | | | | | | | | | QNX uses GCC, but by default not libstdc++ as the standard library, but 'libcpp', a Dinkumware-derived implementation that doesn't sport many of the C++11 features, yet. Thus, the compiler detection sets Q_COMPILER_INITIALIZER_LIST, which is true, in a way, but we're lacking stdlib support, so the next \#include <initializer_list> will fail. So, simply don't define Q_COMPILER_INITIALIZER_LIST if we're on QNX and detect a Dinkumware signature (taken from Boost.Config). This is a hot-fix. I'm also preparing a more comprehensive solution (qstdlibdetection.h). Change-Id: Ieeb147251c2935517faba61f75d1580a9e1649c4 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
* Add detection for C++11 noexceptThiago Macieira2012-06-291-0/+13
| | | | | | | | | | | | | | | | | The Q_COMPILER_NOEXCEPT feature indicates whether this compiler has support for noexcept. Note that the GCC C++11 status page does not list this feature, but investigation into the source code as well as testing reveals it's supported since GCC 4.6. Also add Q_DECL_NOEXCEPT, to be used to declare that a function throws no exceptions, and Q_DECL_NOEXCEPT_EXPR(x), which declares that the function throws no exceptions if x evaluates to true. In C++98 mode, these macros expand to empty -- the old C++98 and C++03 exception specification is deprecated and considered harmful. Change-Id: Ic84901d13eceb06dcc7f025a4b7fc8b250769be9 Reviewed-by: Marc Mutz <marc.mutz@kdab.com> Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* Add qMove macro to support std::moveOlivier Goffart2012-06-201-0/+6
| | | | | Change-Id: I373e07f479c11b172dab35ed7e5b62724aa50a1a Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Clean up some QT_HAVE_xxx macros in qcompilerdetection.hThiago Macieira2012-05-181-9/+0
| | | | | | | | | | | | | | We no longer have code doing MMX or 3dNow! on Qt 5, so nothing defines those macros. If nothing defines them, we don't need to undef them. Note that the SSE case is a mislabel: the old "SSE" code on Qt 4 wasn't real SSE, it was MMX with some instructions added at the same time as SSE was added. It's MMX that Windows 64 doesn't support. As for QT_HAVE_ARMV6, this macro is replaced by the sub-arch detection in qprocessordetection.h. Change-Id: Ic3b00e1533e6b4cea32ba7824233de0a5c0fb32b Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
* Split Q_COMPILER_DEFAULT_DELETE_MEMBERSBradley T. Hughes2012-05-151-6/+23
| | | | | | | | | | | | | | | | Based on reviewer comments on https://codereview.qt-project.org/#change,25992, split Q_COMPILER_DEFAULT_DELETE_MEMBERS into Q_COMPILER_DEFAULT_MEMBERS and Q_COMPILER_DELETE_MEMBERS. Clang provides 2 separate feature checks for these, all other compilers always define both. Keep the Q_COMPILER_DEFAULT_DELETE_MEMBERS define, though, for any existing code that may be using it. Change-Id: I8969e10989c776a822da153152cfecb99dda8cb9 Reviewed-by: Olivier Goffart <ogoffart@woboq.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* clang: Use __has_feature() to detect C++11 featuresBradley T. Hughes2012-05-141-21/+74
| | | | | | | | | | | | | | Apple's clang version is often reported as the next official clang version, but Apple clang does not support all the features that the final official clang does. Instead of using version based feature detection, use the __has_feature() built-in instead, so that we correctly #define the various Q_COMPILER_* macros. Task-number: QTBUG-25554 Change-Id: I2195401dbf6cd8574c30aa1bd6f7cf1cf537dae7 Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com> Reviewed-by: Olivier Goffart <ogoffart@woboq.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Avoid macro re-definition warning for QT_NO_EXCEPTIONSStephen Kelly2012-05-021-1/+3
| | | | | Change-Id: I0c4b2d00dd567af17f22b733b93032ff1056fcbd Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Avoid undefined macro warning for __GXX_EXPERIMENTAL_CXX0X__.Stephen Kelly2012-05-021-1/+1
| | | | | | | The GCC use of this is already correct. Change-Id: I28650196c7a325b552117fe2f2014ad7d6b365c2 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Mark that the Sun compiler includes the return type in the manglingThiago Macieira2012-04-271-0/+1
| | | | | | | | | | | | | | | | | | Source: http://developers.sun.com/solaris/articles/external_linkage.html %dem __1cFgreet6F_pc_ __1cFgreet6F_pc_ == char*greet() Source: http://www.oracle.com/technetwork/articles/servers-storage-dev/stablecplusplusabi-333927.html Function Mangled Name float f(float) __1cBf6Ff_f_ int f(int) __1cBf6Fi_i_ int T::f(int) __1cBTBf6Mi_i_ int T::f(char*) __1cBTBf6Mpc_i_ int T::U::f(int) __1cBTBUBf6Mi_i_ int N::T::f(int) __1cBNBTBf6Mi_i_ Change-Id: Ibe1934f1c137d1657fb122cbf1a1b1fbc3e4a202 Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
* Move Q_FUNC_INFO to qcompilerdetection.hThiago Macieira2012-04-231-0/+11
| | | | | | Change-Id: Ibc63913f070febe561890e98ef079ca883d9bfc9 Reviewed-by: Olivier Goffart <ogoffart@woboq.com> Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
* Ensure that qXXXdetection.h can be included directlyThiago Macieira2012-04-211-0/+4
| | | | | | | | | Those files might have dependency on one another, on qconfig.h and on early qglobal.h definitions, so ensure that the only correct include order is that of qglobal.h. Change-Id: I89098bacaf16353ee8b51604ee885508dc8e201a Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* Make the fallback Q_ASSUME and Q_UNREACHABLE be qt_noopThiago Macieira2012-04-211-2/+2
| | | | | | | | That way, we can properly add ; after them, and I can use Q_ASSUME in Q_ASSERT's else condition. Change-Id: Iad35819fbb06714116b7dd0f952e1c2c89044c72 Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* Move Q_DECL_{IMPORT,EXPORT,HIDDEN} to qcompilerdetection.hThiago Macieira2012-04-211-0/+29
| | | | | | | | | | | | | | Mindful of QT_VISIBILITY_AVAILABLE and Q_OS_WIN for GCC: when GCC is used on Windows (i.e., MinGW or potentially Cygwin), use the declspec variant so we produce proper DLL imports and exports. When used on other platforms, rely on configure adding QT_VISIBILITY_AVAILABLE to qconfig.h, which confirms that the -fvisibility argument is available. That flag has been available since GCC 4.0 on ELF targets, but it could be missing on some other targets. Change-Id: I3dbc0043c1eaee0c469c5b1dc8bf05842fe9cd47 Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* Move some compiler macro definitions into the compiler sectionsThiago Macieira2012-04-211-26/+12
| | | | | | | Makes for a couple of cleaner definitions of fallbacks. Change-Id: I9b1a6f77bab986514e1862ae1f431ea37b89c1b5 Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* Move the compiler-related macros to qcompilerdetection.hThiago Macieira2012-04-211-4/+110
| | | | | | | | This cleans up qglobal.h a little further and organises things a bit more. Change-Id: Ic025e720941cdf59b8a1a0baf515b29f25eba0f1 Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* Merge remote-tracking branch 'origin/master' into api_changesLars Knoll2012-04-161-2/+4
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: configure src/corelib/io/qurl.cpp src/gui/kernel/qwindow.cpp src/tools/moc/generator.cpp src/widgets/kernel/qwidget_qpa.cpp src/widgets/styles/qstyle.h src/widgets/widgets/qtabbar.cpp tests/auto/corelib/codecs/utf8/tst_utf8.cpp Change-Id: Ia457228d6f684ec8184e13e8fcc9d25857b1751e
| * __builtin_unreachable was added to GCC in version 4.5, so fix macrosThiago Macieira2012-04-131-2/+4
| | | | | | | | | | Change-Id: Ida63bb46f696ae9d60331d863bf1478415a08ff2 Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* | Merge remote-tracking branch 'origin/master' into api_changesOswald Buddenhagen2012-04-101-0/+6
|\| | | | | | | | | | | | | | | | | | | Conflicts: configure src/widgets/styles/qwindowsxpstyle.cpp tests/auto/gui/kernel/qwindow/qwindow.pro tests/auto/gui/kernel/qwindow/tst_qwindow.cpp Change-Id: I624b6d26abce9874c610c04954c1c45bc074bef3
| * Add a Q_NORETURN macro to mark a function that never returnsThiago Macieira2012-03-271-0/+6
| | | | | | | | | | | | | | | | | | This is implemented for GCC, ICC, Clang and MSVC. With this macro, the compiler can generate better code because it knows that the function being called will not return. Change-Id: Iea2bc7be464606639be65ccb73911d7ed1b29a64 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
* | Enable variadic macros for MSVC >= 2005João Abecasis2012-04-051-0/+4
|/ | | | | Change-Id: I8793ea0f6e3a640276b073321d29373b2ed18d63 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
* Add macros for assuming and unreachable codeThiago Macieira2012-03-241-0/+8
| | | | | | | | | | Use these macros to tell the compiler about conditions that may happen, so it will generate better code. But do not assume that they will do anything special. Change-Id: I89ec4f65f48a9340ccf5ffc4ae4b8c3d8897c8b1 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com> Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
* Update the C++11 support macrosThiago Macieira2012-03-241-45/+111
| | | | | | | | Move them all to a central place and document each macro, so we don't give typo names by accident Change-Id: Ia863ac3f7ca82e4d2f8388b3e691a12c7e482283 Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com>
* Require compiler support for deprecated constructors.Stephen Kelly2012-02-231-3/+0
| | | | | Change-Id: I1d4cdcbbddb7895e6529e4f6b5295312e9a3a0e6 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Remove unused Q_CANNOT_DELETE_CONSTANTStephen Kelly2012-02-221-2/+0
| | | | | Change-Id: I697f3f786d84fa766b3bc48d93fc265deee5fdcf Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Remove detection of GCC versions which are not supported anywhere.Stephen Kelly2012-02-221-31/+8
| | | | | Change-Id: If254af51880e20be486b14f5237e6e1d4e4d6af3 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Fail with #error early if the compiler does not support bool or explicit.Stephen Kelly2012-02-221-23/+10
| | | | | | | | The fail mode for bool is moved from later in qglobal.h, and explicit is used unguarded throughout Qt, so the macro is already useless. Change-Id: Iff26892b025ba155e360a1f2dc93a67a6622dbc1 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
* Make syncqt ignore qsystemdetection.h and qcompilerdetection.hBradley T. Hughes2012-02-071-14/+0
| | | | | | | | | | Remove the #if 0'd blocks and instead add these headers to sync.profile's @ignore_for_include_check, as documented at http://wiki.qt-project.org/Creating_a_new_module_or_tool_for_Qt#other_fields Change-Id: I3bd6e8cb21eca139fdca10fe970eeaf2e4e77c24 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
* Move compiler detection from qglobal.h to a separate headerBradley T. Hughes2012-02-061-0/+551
qcompilerdetection.h is included from qglobal.h, and does all Q_CC_* and compiler feature detection. Change-Id: Idd06054e172ef6fa73774e26fa38753996c4161b Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>