# RUN: llc -O0 -start-before=livedebugvalues -filetype=obj -o - %s | llvm-dwarfdump -v - | FileCheck %s # # Derived from (clang -O0 -g -fsanitize=address -fobjc-arc) # @protocol NSObject # @end # @interface NSObject{} # + (instancetype)alloc; # @end # struct CGSize { # double width; # double height; # }; # typedef struct CGSize CGSize; # @interface Object : NSObject # - (instancetype)initWithSize:(CGSize)size; # - (id)aMessage; # @end # @implementation MyObject # + (id)doWithSize:(CGSize)imageSize andObject:(id)object { # return [object aMessage]; # } # @end # # CHECK: .debug_info contents: # CHECK: DW_TAG_subprogram # CHECK-NEXT: DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000) # CHECK-NEXT: DW_AT_high_pc [DW_FORM_addr] ([[FN_END:.*]]) # CHECK: "_cmd" # CHECK: DW_TAG_formal_parameter # CHECK-NEXT: DW_AT_location # CHECK-NEXT: [0x{{.*}}, 0x{{.*}}): # CHECK-NOT: DW_AT_ # CHECK: [0x{{.*}}, [[FN_END]]): # CHECK-NEXT: DW_AT_name {{.*}}"imageSize" --- | ; ModuleID = 'test/DebugInfo/AArch64/asan-stack-vars.ll' source_filename = "m.m" target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128" target triple = "arm64-apple-ios" %0 = type opaque %struct._class_t = type { ptr, ptr, ptr, ptr, ptr } %struct._objc_cache = type opaque %struct._class_ro_t = type { i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr } %struct.__method_list_t = type { i32, i32, [0 x %struct._objc_method] } %struct._objc_method = type { ptr, ptr, ptr } %struct._objc_protocol_list = type { i64, [0 x ptr] } %struct._protocol_t = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32, ptr, ptr, ptr } %struct._ivar_list_t = type { i32, i32, [0 x %struct._ivar_t] } %struct._ivar_t = type { ptr, ptr, ptr, i32, i32 } %struct._prop_list_t = type { i32, i32, [0 x %struct._prop_t] } %struct._prop_t = type { ptr, ptr } %struct.CGSize = type { double, double } @"OBJC_CLASS_$_Object" = external global %struct._class_t @"OBJC_CLASSLIST_REFERENCES_$_" = private global ptr @"OBJC_CLASS_$_Object", section "__DATA, __objc_classrefs, regular, no_dead_strip", align 8 @OBJC_METH_VAR_NAME_ = private unnamed_addr constant [6 x i8] c"alloc\00", section "__TEXT,__objc_methname,cstring_literals", align 1 @OBJC_SELECTOR_REFERENCES_ = private externally_initialized global ptr @OBJC_METH_VAR_NAME_, section "__DATA, __objc_selrefs, literal_pointers, no_dead_strip", align 8 @OBJC_METH_VAR_NAME_.1 = private unnamed_addr constant [14 x i8] c"initWithSize:\00", section "__TEXT,__objc_methname,cstring_literals", align 1 @OBJC_SELECTOR_REFERENCES_.2 = private externally_initialized global ptr @OBJC_METH_VAR_NAME_.1, section "__DATA, __objc_selrefs, literal_pointers, no_dead_strip", align 8 @OBJC_METH_VAR_NAME_.3 = private unnamed_addr constant [9 x i8] c"aMessage\00", section "__TEXT,__objc_methname,cstring_literals", align 1 @OBJC_SELECTOR_REFERENCES_.4 = private externally_initialized global ptr @OBJC_METH_VAR_NAME_.3, section "__DATA, __objc_selrefs, literal_pointers, no_dead_strip", align 8 @_objc_empty_cache = external global %struct._objc_cache @"OBJC_CLASS_$_MyObject" = global %struct._class_t { ptr @"OBJC_METACLASS_$_MyObject", ptr null, ptr @_objc_empty_cache, ptr null, ptr @"\01l_OBJC_CLASS_RO_$_MyObject" }, section "__DATA, __objc_data", align 8 @"OBJC_METACLASS_$_MyObject" = global %struct._class_t { ptr @"OBJC_METACLASS_$_MyObject", ptr @"OBJC_CLASS_$_MyObject", ptr @_objc_empty_cache, ptr null, ptr @"\01l_OBJC_METACLASS_RO_$_MyObject" }, section "__DATA, __objc_data", align 8 @OBJC_CLASS_NAME_ = private unnamed_addr constant [9 x i8] c"MyObject\00", section "__TEXT,__objc_classname,cstring_literals", align 1 @OBJC_METH_VAR_NAME_.5 = private unnamed_addr constant [12 x i8] c"doWithSize:\00", section "__TEXT,__objc_methname,cstring_literals", align 1 @OBJC_METH_VAR_TYPE_ = private unnamed_addr constant [21 x i8] c"@32@0:8{CGSize=dd}16\00", section "__TEXT,__objc_methtype,cstring_literals", align 1 @"\01l_OBJC_$_CLASS_METHODS_MyObject" = private global { i32, i32, [1 x %struct._objc_method] } { i32 24, i32 1, [1 x %struct._objc_method] [%struct._objc_method { ptr @OBJC_METH_VAR_NAME_.5, ptr @OBJC_METH_VAR_TYPE_, ptr @"\01+[MyObject doWithSize:]" }] }, section "__DATA, __objc_const", align 8 @"\01l_OBJC_METACLASS_RO_$_MyObject" = private global %struct._class_ro_t { i32 131, i32 40, i32 40, ptr null, ptr @OBJC_CLASS_NAME_, ptr @"\01l_OBJC_$_CLASS_METHODS_MyObject", ptr null, ptr null, ptr null, ptr null }, section "__DATA, __objc_const", align 8 @"\01l_OBJC_CLASS_RO_$_MyObject" = private global %struct._class_ro_t { i32 130, i32 0, i32 0, ptr null, ptr @OBJC_CLASS_NAME_, ptr null, ptr null, ptr null, ptr null, ptr null }, section "__DATA, __objc_const", align 8 @"OBJC_LABEL_CLASS_$" = private global [1 x ptr] [ptr @"OBJC_CLASS_$_MyObject"], section "__DATA, __objc_classlist, regular, no_dead_strip", align 8 @llvm.compiler.used = appending global [12 x ptr] [ptr @"OBJC_CLASSLIST_REFERENCES_$_", ptr @OBJC_METH_VAR_NAME_, ptr @OBJC_SELECTOR_REFERENCES_, ptr @OBJC_METH_VAR_NAME_.1, ptr @OBJC_SELECTOR_REFERENCES_.2, ptr @OBJC_METH_VAR_NAME_.3, ptr @OBJC_SELECTOR_REFERENCES_.4, ptr @OBJC_CLASS_NAME_, ptr @OBJC_METH_VAR_NAME_.5, ptr @OBJC_METH_VAR_TYPE_, ptr @"\01l_OBJC_$_CLASS_METHODS_MyObject", ptr @"OBJC_LABEL_CLASS_$"], section "llvm.metadata" @llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 1, ptr @asan.module_ctor, ptr null }] @__asan_shadow_memory_dynamic_address = external global i64 @___asan_gen_ = private unnamed_addr constant [34 x i8] c"2 32 16 9 imageSize 64 8 6 object\00", align 1 @__stack_chk_guard = external global ptr ; Function Attrs: noinline sanitize_address ssp uwtable define internal ptr @"\01+[MyObject doWithSize:]"(ptr %self, ptr %_cmd, [2 x double] %imageSize.coerce) #0 !dbg !14 { entry: %StackGuardSlot = alloca ptr %0 = call ptr @llvm.stackguard() call void @llvm.stackprotector(ptr %0, ptr %StackGuardSlot) %1 = load i64, ptr @__asan_shadow_memory_dynamic_address %self.addr = alloca ptr, align 8 %_cmd.addr = alloca ptr, align 8 %MyAlloca = alloca [96 x i8], align 32, !dbg !35 %2 = ptrtoint ptr %MyAlloca to i64, !dbg !35 %3 = add i64 %2, 32, !dbg !35 %4 = inttoptr i64 %3 to ptr, !dbg !35 %5 = add i64 %2, 64, !dbg !35 %6 = inttoptr i64 %5 to ptr, !dbg !35 %7 = inttoptr i64 %2 to ptr, !dbg !35 store i64 1102416563, ptr %7, !dbg !35 %8 = add i64 %2, 8, !dbg !35 %9 = inttoptr i64 %8 to ptr, !dbg !35 store i64 ptrtoint (ptr @___asan_gen_ to i64), ptr %9, !dbg !35 %10 = add i64 %2, 16, !dbg !35 %11 = inttoptr i64 %10 to ptr, !dbg !35 store i64 ptrtoint (ptr @"\01+[MyObject doWithSize:]" to i64), ptr %11, !dbg !35 %12 = lshr i64 %2, 3, !dbg !35 %13 = add i64 %12, %1, !dbg !35 %14 = add i64 %13, 0, !dbg !35 %15 = inttoptr i64 %14 to ptr, !dbg !35 store i64 -940689368107847183, ptr %15, align 1, !dbg !35 %16 = add i64 %13, 9, !dbg !35 %17 = inttoptr i64 %16 to ptr, !dbg !35 store i16 -3085, ptr %17, align 1, !dbg !35 %18 = add i64 %13, 11, !dbg !35 %19 = inttoptr i64 %18 to ptr, !dbg !35 store i8 -13, ptr %19, align 1, !dbg !35 call void @llvm.dbg.declare(metadata ptr %4, metadata !36, metadata !DIExpression(DW_OP_deref)), !dbg !37 call void @llvm.dbg.declare(metadata ptr %6, metadata !38, metadata !DIExpression(DW_OP_deref)), !dbg !44 %20 = bitcast ptr %4 to ptr %21 = ptrtoint ptr %20 to i64 %22 = lshr i64 %21, 3 %23 = add i64 %22, %1 %24 = inttoptr i64 %23 to ptr %25 = load i16, ptr %24 %26 = icmp ne i16 %25, 0 br i1 %26, label %27, label %28 ;