[PATCH 10/12] dbghelp/dwarf: fix incorrect WARN

Eric Pouech eric.pouech at gmail.com
Sun Sep 26 07:47:26 CDT 2021



---
 dlls/dbghelp/dwarf.c |   12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/dlls/dbghelp/dwarf.c b/dlls/dbghelp/dwarf.c
index 33c3b7fc467..51789f8591e 100644
--- a/dlls/dbghelp/dwarf.c
+++ b/dlls/dbghelp/dwarf.c
@@ -1948,18 +1948,22 @@ static void dwarf2_parse_variable(dwarf2_subprogram_t* subpgm,
     }
     else
     {
-        /* variable has been optimized away... report anyway */
-        loc.kind = loc_error;
-        loc.reg = loc_err_no_location;
         if (subpgm->func)
         {
+            /* local variable has been optimized away... report anyway */
+            loc.kind = loc_error;
+            loc.reg = loc_err_no_location;
             symt_add_func_local(subpgm->ctx->module_ctx->module, subpgm->func,
                                 is_pmt ? DataIsParam : DataIsLocal,
                                 &loc, block, param_type, name.u.string);
         }
         else
         {
-            WARN("dropping global variable %s which has been optimized away\n", debugstr_a(name.u.string));
+            struct attribute is_decl;
+            /* only warn when di doesn't represent a declaration */
+            if (!dwarf2_find_attribute(di, DW_AT_declaration, &is_decl) ||
+                !is_decl.u.uvalue || is_decl.gotten_from != attr_direct)
+                WARN("dropping global variable %s which has been optimized away\n", debugstr_a(name.u.string));
         }
     }
     if (is_pmt && subpgm->func && symt_check_tag(subpgm->func->type, SymTagFunctionType))




More information about the wine-devel mailing list