Selaa lähdekoodia

Add extra check to debug information of named composite types

gingerBill 2 vuotta sitten
vanhempi
commit
51c705edf1
1 muutettua tiedostoa jossa 34 lisäystä ja 7 poistoa
  1. 34 7
      src/llvm_backend_debug.cpp

+ 34 - 7
src/llvm_backend_debug.cpp

@@ -569,14 +569,41 @@ LLVMMetadataRef lb_debug_type(lbModule *m, Type *type) {
 		case Type_Struct:
 		case Type_Union:
 		case Type_BitSet:
-			LLVMMetadataRef temp_forward_decl = LLVMDIBuilderCreateReplaceableCompositeType(
-				m->debug_builder, tag, name_text, name_len, nullptr, nullptr, 0, 0, size_in_bits, align_in_bits, flags, "", 0
-			);
-			idt.metadata = temp_forward_decl;
+			{
+				LLVMMetadataRef temp_forward_decl = LLVMDIBuilderCreateReplaceableCompositeType(
+					m->debug_builder, tag, name_text, name_len, nullptr, nullptr, 0, 0, size_in_bits, align_in_bits, flags, "", 0
+				);
+				idt.metadata = temp_forward_decl;
+
+				array_add(&m->debug_incomplete_types, idt);
+				lb_set_llvm_metadata(m, type, temp_forward_decl);
+
+				LLVMMetadataRef dummy = nullptr;
+				switch (bt->kind) {
+				case Type_Slice:
+					dummy = lb_debug_type(m, bt->Slice.elem);
+					dummy = lb_debug_type(m, t_int);
+					break;
+				case Type_DynamicArray:
+					dummy = lb_debug_type(m, bt->DynamicArray.elem);
+					dummy = lb_debug_type(m, t_int);
+					dummy = lb_debug_type(m, t_allocator);
+					break;
+				case Type_Map:
+					dummy = lb_debug_type(m, bt->Map.key);
+					dummy = lb_debug_type(m, bt->Map.value);
+					dummy = lb_debug_type(m, t_int);
+					dummy = lb_debug_type(m, t_allocator);
+					dummy = lb_debug_type(m, t_uintptr);
+					break;
+				case Type_BitSet:
+					if (bt->BitSet.elem)       dummy = lb_debug_type(m, bt->BitSet.elem);
+					if (bt->BitSet.underlying) dummy = lb_debug_type(m, bt->BitSet.underlying);
+					break;
+				}
 
-			array_add(&m->debug_incomplete_types, idt);
-			lb_set_llvm_metadata(m, type, temp_forward_decl);
-			return temp_forward_decl;
+				return temp_forward_decl;
+			}
 		}
 	}