[Lldb-commits] [PATCH] D139740: [lldb] Disable macro redefinition warnings in expression wrapper
Raphael Isemann via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Fri Dec 9 12:59:56 PST 2022
teemperor created this revision.
teemperor added a reviewer: Michael137.
teemperor added a project: LLDB.
Herald added a subscriber: JDevlieghere.
Herald added a project: All.
teemperor requested review of this revision.
Herald added a subscriber: lldb-commits.
GCC emits macro definitions into debug info when compiling with `-g3`.
LLDB is translating this information into `#define` directives which are injected into the
source code of user expressions. While this mechanism itself works fine, it can lead to
spurious "... macro redefined" warnings when the defined macro is also a builtin Clang macro:
warning: <lldb wrapper prefix>:46:9: '__VERSION__' macro redefined
#define __VERSION__ "12.1.0"
^
<built-in>:19:9: previous definition is here
#define __VERSION__ "Clang 14.0.6"
[repeated about a 100 more times for every builtin macro]
This patch just disables the diagnostic when parsing LLDB's generated list of
macros definitions.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D139740
Files:
lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionSourceCode.cpp
lldb/test/API/commands/expression/macros/TestMacros.py
Index: lldb/test/API/commands/expression/macros/TestMacros.py
===================================================================
--- lldb/test/API/commands/expression/macros/TestMacros.py
+++ lldb/test/API/commands/expression/macros/TestMacros.py
@@ -129,3 +129,8 @@
result = frame.EvaluateExpression("MACRO_2")
self.assertTrue(result.GetError().Fail(),
"Printing MACRO_2 fails in the header file")
+
+ # Check that the macro definitions do not trigger bogus Clang
+ # diagnostics about macro redefinitions.
+ result = frame.EvaluateExpression("does_not_parse")
+ self.assertNotIn("macro redefined", str(result.GetError()))
Index: lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionSourceCode.cpp
===================================================================
--- lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionSourceCode.cpp
+++ lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionSourceCode.cpp
@@ -14,6 +14,7 @@
#include "clang/Basic/FileManager.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Lex/Lexer.h"
+#include "llvm/ADT/ScopeExit.h"
#include "llvm/ADT/StringRef.h"
#include "Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.h"
@@ -141,6 +142,16 @@
if (dm == nullptr)
return;
+ // The macros directives below can potentially redefine builtin macros of the
+ // Clang instance which parses the user expression. The Clang diagnostics
+ // caused by this are not useful for the user as the source code here is
+ // generated by LLDB.
+ stream << "#pragma clang diagnostic push\n";
+ stream << "#pragma clang diagnostic ignored \"-Wmacro-redefined\"\n";
+ auto pop_warning = llvm::make_scope_exit([&stream](){
+ stream << "#pragma clang diagnostic pop\n";
+ });
+
for (size_t i = 0; i < dm->GetNumMacroEntries(); i++) {
const DebugMacroEntry &entry = dm->GetMacroEntryAtIndex(i);
uint32_t line;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D139740.481721.patch
Type: text/x-patch
Size: 1957 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20221209/c19d7025/attachment.bin>
More information about the lldb-commits
mailing list