dbghelp: Return proper null value when lookup_type fails.
authorEric Pouech <eric.pouech@orange.fr>
Sat, 26 Mar 2011 11:16:39 +0000 (12:16 +0100)
committerAlexandre Julliard <julliard@winehq.org>
Mon, 28 Mar 2011 15:24:48 +0000 (17:24 +0200)
dlls/dbghelp/dwarf.c

index 5596c4543c751893bae2190d07ed4f6906404a29..f0eabaf90b13346594a4824b8f9df1cfde0e270d 100644 (file)
@@ -941,22 +941,24 @@ static BOOL dwarf2_compute_location_attr(dwarf2_parse_context_t* ctx,
 static struct symt* dwarf2_lookup_type(dwarf2_parse_context_t* ctx,
                                        const dwarf2_debug_info_t* di)
 {
-    struct attribute    attr;
+    struct attribute attr;
+    dwarf2_debug_info_t* type;
 
-    if (dwarf2_find_attribute(ctx, di, DW_AT_type, &attr))
+    if (!dwarf2_find_attribute(ctx, di, DW_AT_type, &attr))
+        return NULL;
+    if (!(type = sparse_array_find(&ctx->debug_info_table, attr.u.uvalue)))
     {
-        dwarf2_debug_info_t*    type;
-        
-        type = sparse_array_find(&ctx->debug_info_table, attr.u.uvalue);
-        if (!type) FIXME("Unable to find back reference to type %lx\n", attr.u.uvalue);
+        FIXME("Unable to find back reference to type %lx\n", attr.u.uvalue);
+        return NULL;
+    }
+    if (!type->symt)
+    {
+        /* load the debug info entity */
+        dwarf2_load_one_entry(ctx, type);
         if (!type->symt)
-        {
-            /* load the debug info entity */
-            dwarf2_load_one_entry(ctx, type);
-        }
-        return type->symt;
+            FIXME("Unable to load forward reference for tag %lx\n", type->abbrev->tag);
     }
-    return NULL;
+    return type->symt;
 }
 
 static const char* dwarf2_get_cpp_name(dwarf2_parse_context_t* ctx, dwarf2_debug_info_t* di, const char* name)