diff options
| author | Davide Italiano <davide@freebsd.org> | 2017-12-14 23:11:15 +0000 |
|---|---|---|
| committer | Davide Italiano <davide@freebsd.org> | 2017-12-14 23:11:15 +0000 |
| commit | d416b0b90398f11a82d637fee0fa6a41fff2778a (patch) | |
| tree | 960f8f0dce017a69f87a5f54122bb197dcb3f816 | |
| parent | d123f8ccf17478c1a09b0cbdc7e267154c62ca40 (diff) | |
| download | bcm5719-llvm-d416b0b90398f11a82d637fee0fa6a41fff2778a.tar.gz bcm5719-llvm-d416b0b90398f11a82d637fee0fa6a41fff2778a.zip | |
[ExpressionParser] Fix evaluation failures due to mismatch in C++ versions.
Clang recently switched to C++14 (with GNU extensions) as the default
dialect, but LLDB didn't catch up. This causes failures as LLDB still
evaluates ObjectiveC expressions as Objective C++ using C++98 as standard.
There are things not available in C++98, including, e.g. nullptr.
In some cases Objective-C `nil` is defined as `nullptr` so this causes
an evaluation failure. Switch the default to overcome this issue
(actually, currently lldb evaluates both C++11 and C++14 as C++11,
but that seems a larger change and definitely could be re-evaluated
in the future).
No test as this is currently failing on the LLDB bots after the clang
switch (so, de facto, there's a test already for it).
<rdar://problem/36011995>
llvm-svn: 320761
| -rw-r--r-- | lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp index 6c6e4fd1171..c6deca9177f 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp @@ -381,7 +381,15 @@ ClangExpressionParser::ClangExpressionParser(ExecutionContextScope *exe_scope, // For now, the expression parser must use C++ anytime the // language is a C family language, because the expression parser // uses features of C++ to capture values. + + // Clang now sets as default C++14 as the default standard (with + // GNU extensions), so we do the same here to avoid mismatches that + // cause compiler error when evaluating expressions (e.g. nullptr + // not found as it's a C++11 feature). Currently lldb evaluates + // C++14 as C++11 (see two lines below) so we decide to be consistent + // with that, but this could be re-evaluated in the future. m_compiler->getLangOpts().CPlusPlus = true; + m_compiler->getLangOpts().CPlusPlus11 = true; break; case lldb::eLanguageTypeObjC: m_compiler->getLangOpts().ObjC1 = true; |

