diff options
author | Cristian Adam <cristian.adam@qt.io> | 2021-08-19 16:27:54 +0200 |
---|---|---|
committer | Cristian Adam <cristian.adam@qt.io> | 2021-08-20 15:28:57 +0000 |
commit | 54c53223228539e3ca4126657ae52bc2fc705c71 (patch) | |
tree | 4ca70fd317f54e73a376ee9a41b81b82f47dd871 /src/plugins/cpptools/compileroptionsbuilder.cpp | |
parent | dc8801e495ecabc4b126dda3c56212dc253b75b0 (diff) | |
download | qt-creator-54c53223228539e3ca4126657ae52bc2fc705c71.tar.gz |
CppTools: Code model fix for C++20, MSVC, and newer CMake versions
Starting with version 3.20 CMake adds -std:c++20, which breaks the
code model when using MSVC.
Clang-cl 12 doesn't know about -std:c++20, but clang driver knows
about -std=c++20.
Fixes: QTCREATORBUG-26146
Change-Id: I696842e11b0a9ba8849455d2f81f8dde6dd95a27
Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
Diffstat (limited to 'src/plugins/cpptools/compileroptionsbuilder.cpp')
-rw-r--r-- | src/plugins/cpptools/compileroptionsbuilder.cpp | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/src/plugins/cpptools/compileroptionsbuilder.cpp b/src/plugins/cpptools/compileroptionsbuilder.cpp index 09291830b3..7ee9b6bdf8 100644 --- a/src/plugins/cpptools/compileroptionsbuilder.cpp +++ b/src/plugins/cpptools/compileroptionsbuilder.cpp @@ -478,7 +478,10 @@ void CompilerOptionsBuilder::addLanguageVersionAndExtensions() case LanguageVersion::CXX17: option = "/std:c++17"; break; - case LanguageVersion::CXX2a: + case LanguageVersion::CXX20: + option = "/std:c++20"; + break; + case LanguageVersion::CXX2b: option = "/std:c++latest"; break; } @@ -523,8 +526,11 @@ void CompilerOptionsBuilder::addLanguageVersionAndExtensions() case LanguageVersion::CXX17: option = (gnuExtensions ? QLatin1String("-std=gnu++17") : QLatin1String("-std=c++17")); break; - case LanguageVersion::CXX2a: - option = (gnuExtensions ? QLatin1String("-std=gnu++2a") : QLatin1String("-std=c++2a")); + case LanguageVersion::CXX20: + option = (gnuExtensions ? QLatin1String("-std=gnu++20") : QLatin1String("-std=c++20")); + break; + case LanguageVersion::CXX2b: + option = (gnuExtensions ? QLatin1String("-std=gnu++2b") : QLatin1String("-std=c++2b")); break; case LanguageVersion::None: break; @@ -874,6 +880,14 @@ void CompilerOptionsBuilder::evaluateCompilerFlags() theOption[0] = '-'; } + // Clang-cl (as of Clang 12) frontend doesn't know about -std:c++20 + // but the clang front end knows about -std=c++20 + // https://github.com/llvm/llvm-project/blob/release/12.x/clang/lib/Driver/ToolChains/Clang.cpp#L5855 + if (toolChain == ProjectExplorer::Constants::MSVC_TOOLCHAIN_TYPEID || + toolChain == ProjectExplorer::Constants::CLANG_CL_TOOLCHAIN_TYPEID) { + theOption.replace("-std:c++20", "-clang:-std=c++20"); + } + m_compilerFlags.flags.append(theOption); } |