diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionParser.cpp @@ -491,9 +491,11 @@ // be re-evaluated in the future. lang_opts.CPlusPlus11 = true; break; + case lldb::eLanguageTypeC_plus_plus_14: + lang_opts.CPlusPlus14 = true; + LLVM_FALLTHROUGH; case lldb::eLanguageTypeC_plus_plus: case lldb::eLanguageTypeC_plus_plus_11: - case lldb::eLanguageTypeC_plus_plus_14: lang_opts.CPlusPlus11 = true; m_compiler->getHeaderSearchOpts().UseLibcxx = true; LLVM_FALLTHROUGH; diff --git a/lldb/test/API/lang/cpp/standards/cpp11/Makefile b/lldb/test/API/lang/cpp/standards/cpp11/Makefile new file mode 100644 --- /dev/null +++ b/lldb/test/API/lang/cpp/standards/cpp11/Makefile @@ -0,0 +1,4 @@ +CXX_SOURCES := main.cpp +CXXFLAGS_EXTRAS := -std=c++11 + +include Makefile.rules diff --git a/lldb/test/API/lang/cpp/standards/cpp11/TestCPP11Standard.py b/lldb/test/API/lang/cpp/standards/cpp11/TestCPP11Standard.py new file mode 100644 --- /dev/null +++ b/lldb/test/API/lang/cpp/standards/cpp11/TestCPP11Standard.py @@ -0,0 +1,19 @@ +import lldb +from lldbsuite.test.decorators import * +from lldbsuite.test.lldbtest import * +from lldbsuite.test import lldbutil + +class TestCase(TestBase): + + mydir = TestBase.compute_mydir(__file__) + + def test(self): + self.build() + lldbutil.run_to_source_breakpoint(self, "// break here", lldb.SBFileSpec("main.cpp")) + + # Run an expression that is valid in C++11 (as it uses nullptr). + self.expect_expr("nullptr == nullptr", result_type="bool", result_value="true") + + # Run a expression that is not valid in C++11 (as it uses polymorphic + # lambdas from C++14). + self.expect("expr [](auto x) { return x; }(1)", error=True, substrs=["'auto' not allowed in lambda parameter"]) diff --git a/lldb/test/API/lang/cpp/standards/cpp11/main.cpp b/lldb/test/API/lang/cpp/standards/cpp11/main.cpp new file mode 100644 --- /dev/null +++ b/lldb/test/API/lang/cpp/standards/cpp11/main.cpp @@ -0,0 +1,3 @@ +int main() { + return 0; // break here +} diff --git a/lldb/test/API/lang/cpp/standards/cpp14/Makefile b/lldb/test/API/lang/cpp/standards/cpp14/Makefile new file mode 100644 --- /dev/null +++ b/lldb/test/API/lang/cpp/standards/cpp14/Makefile @@ -0,0 +1,4 @@ +CXX_SOURCES := main.cpp +CXXFLAGS_EXTRAS := -std=c++14 + +include Makefile.rules diff --git a/lldb/test/API/lang/cpp/standards/cpp14/TestCPP14Standard.py b/lldb/test/API/lang/cpp/standards/cpp14/TestCPP14Standard.py new file mode 100644 --- /dev/null +++ b/lldb/test/API/lang/cpp/standards/cpp14/TestCPP14Standard.py @@ -0,0 +1,19 @@ +import lldb +from lldbsuite.test.decorators import * +from lldbsuite.test.lldbtest import * +from lldbsuite.test import lldbutil + +class TestCase(TestBase): + + mydir = TestBase.compute_mydir(__file__) + + def test(self): + self.build() + lldbutil.run_to_source_breakpoint(self, "// break here", lldb.SBFileSpec("main.cpp")) + + # Run an expression that is valid in C++11 (as it uses nullptr). + self.expect_expr("nullptr == nullptr", result_type="bool", result_value="true") + + # Run a expression that is only valid in C++14 that (as it uses + # polymorphic lambdas). + self.expect_expr("[](auto x) { return x; }(1)", result_type="int", result_value="1") diff --git a/lldb/test/API/lang/cpp/standards/cpp14/main.cpp b/lldb/test/API/lang/cpp/standards/cpp14/main.cpp new file mode 100644 --- /dev/null +++ b/lldb/test/API/lang/cpp/standards/cpp14/main.cpp @@ -0,0 +1,3 @@ +int main() { + return 0; // break here +}