[Lldb-commits] [lldb] [lldb][Expression] Reject languages not supported by TypeSystems for expression evaluation (PR #156648)
Michael Buch via lldb-commits
lldb-commits at lists.llvm.org
Wed Sep 3 04:33:01 PDT 2025
https://github.com/Michael137 created https://github.com/llvm/llvm-project/pull/156648
There are some languages for which the `ClangExpressionParser` currently switches the language type behind a user's back. Specifically, `C` gets turned into `C++` and `ObjC` into `ObjC++`. That's because the Clang expression evaluator depends on C++ features. These languages have different semantics, so if, e.g., a user forcefully wants to evaluate an expression in `C`, but we switch it to `C++`, we get reports from users confused why the expression failed.
This patch rejects languages specified with `expression --language` that we won't be able to explicitly evaluate.
rdar://159669244
>From 5689f9e8489c66237097891e98aba93571f8583f Mon Sep 17 00:00:00 2001
From: Michael Buch <michaelbuch12 at gmail.com>
Date: Wed, 3 Sep 2025 12:19:17 +0100
Subject: [PATCH] [lldb][Expression] Reject languages not supported by
TypeSystems for expression evaluation
There are some languages for which the `ClangExpressionParser` currently
switches the language type behind a user's back. Specifically, `C` gets
turned into `C++` and `ObjC` into `ObjC++`. That's because the Clang
expression evaluator depends on C++ features. These languages have
different semantics, so if, e.g., a user forcefully wants to evaluate an
expression in `C`, but we switch it to `C++`, we get reports from users
confused why the expression failed.
This patch rejects languages specified with `expression --language` that
we won't be able to explicitly evaluate.
rdar://159669244
---
lldb/source/Commands/CommandObjectExpression.cpp | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/lldb/source/Commands/CommandObjectExpression.cpp b/lldb/source/Commands/CommandObjectExpression.cpp
index 197bffe9c982f..accc46431d927 100644
--- a/lldb/source/Commands/CommandObjectExpression.cpp
+++ b/lldb/source/Commands/CommandObjectExpression.cpp
@@ -44,18 +44,21 @@ Status CommandObjectExpression::CommandOptions::SetOptionValue(
const int short_option = GetDefinitions()[option_idx].short_option;
switch (short_option) {
- case 'l':
+ case 'l': {
language = Language::GetLanguageTypeFromString(option_arg);
- if (language == eLanguageTypeUnknown) {
+
+ if (const LanguageSet supported_languages =
+ Language::GetLanguagesSupportingTypeSystemsForExpressions();
+ !supported_languages[language]) {
StreamString sstr;
- sstr.Printf("unknown language type: '%s' for expression. "
+ sstr.Printf("invalid language '%s' for expression. "
"List of supported languages:\n",
option_arg.str().c_str());
Language::PrintSupportedLanguagesForExpressions(sstr, " ", "\n");
error = Status(sstr.GetString().str());
}
- break;
+ } break;
case 'a': {
bool success;
More information about the lldb-commits
mailing list