diff options
author | David Blaikie <dblaikie@gmail.com> | 2014-10-01 00:56:55 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2014-10-01 00:56:55 +0000 |
commit | 32b0f365a2f428e4f2b92f38474d1eccf70fd7d4 (patch) | |
tree | 91c7c535d5aeb8da5af240f6ca7eac75000470a8 /llvm/test | |
parent | 05d8c8e682f02b6644789c968df67b25c89469ad (diff) | |
download | bcm5719-llvm-32b0f365a2f428e4f2b92f38474d1eccf70fd7d4.tar.gz bcm5719-llvm-32b0f365a2f428e4f2b92f38474d1eccf70fd7d4.zip |
Implement DW_TAG_subrange_type with DW_AT_count rather than DW_AT_upper_bound
This allows proper disambiguation of unbounded arrays and arrays of zero
bound ("struct foo { int x[]; };" and "struct foo { int x[0]; }"). GCC
instead produces an upper bound of -1 in the latter situation, but count
seems tidier. This way lower_bound is provided if it's not the language
default and count is provided if the count is known, otherwise it's
omitted. Simple.
If someone wants to look at rdar://problem/12566646 and see if this
change is acceptable to that bug/fix, that might be helpful (see the
empty-and-one-elem-array.ll test case which cites that radar).
llvm-svn: 218726
Diffstat (limited to 'llvm/test')
-rw-r--r-- | llvm/test/DebugInfo/X86/dbg-subrange.ll | 2 | ||||
-rw-r--r-- | llvm/test/DebugInfo/X86/empty-and-one-elem-array.ll | 9 | ||||
-rw-r--r-- | llvm/test/DebugInfo/X86/nondefault-subrange-array.ll | 2 |
3 files changed, 5 insertions, 8 deletions
diff --git a/llvm/test/DebugInfo/X86/dbg-subrange.ll b/llvm/test/DebugInfo/X86/dbg-subrange.ll index f8761d012e8..a42a87850be 100644 --- a/llvm/test/DebugInfo/X86/dbg-subrange.ll +++ b/llvm/test/DebugInfo/X86/dbg-subrange.ll @@ -4,7 +4,7 @@ target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f3 target triple = "x86_64-apple-macosx10.7.2" @s = common global [4294967296 x i8] zeroinitializer, align 16 -;CHECK: .long 4294967295 +; CHECK: .quad 4294967296 ## DW_AT_count define void @bar() nounwind uwtable ssp { entry: diff --git a/llvm/test/DebugInfo/X86/empty-and-one-elem-array.ll b/llvm/test/DebugInfo/X86/empty-and-one-elem-array.ll index ba438e8156a..48379ab08f3 100644 --- a/llvm/test/DebugInfo/X86/empty-and-one-elem-array.ll +++ b/llvm/test/DebugInfo/X86/empty-and-one-elem-array.ll @@ -25,9 +25,6 @@ entry: declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone -; An empty array should not have an AT_upper_bound attribute. But an array of 1 -; should. - ; CHECK: DW_TAG_base_type ; CHECK-NEXT: DW_AT_name [DW_FORM_strp] ( .debug_str[{{.*}}] = "int") ; CHECK-NEXT: DW_AT_encoding [DW_FORM_data1] (DW_ATE_signed) @@ -46,7 +43,7 @@ declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone ; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] ; CHECK: DW_TAG_subrange_type [{{.*}}] ; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] -; CHECK-NEXT: DW_AT_upper_bound [DW_FORM_data1] (0x00) +; CHECK-NEXT: DW_AT_count [DW_FORM_data1] (0x01) ; int bar::b[0]: ; CHECK: DW_TAG_structure_type @@ -59,9 +56,9 @@ declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone ; int[0]: ; CHECK: DW_TAG_array_type [{{.*}}] * ; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] -; CHECK: DW_TAG_subrange_type [11] +; CHECK: DW_TAG_subrange_type ; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] -; CHECK-NOT: DW_AT_upper_bound +; CHECK: DW_AT_count [DW_FORM_data1] (0x00) !llvm.dbg.cu = !{!0} !llvm.module.flags = !{!33} diff --git a/llvm/test/DebugInfo/X86/nondefault-subrange-array.ll b/llvm/test/DebugInfo/X86/nondefault-subrange-array.ll index 75728b5e192..dbf6cb6fecb 100644 --- a/llvm/test/DebugInfo/X86/nondefault-subrange-array.ll +++ b/llvm/test/DebugInfo/X86/nondefault-subrange-array.ll @@ -19,7 +19,7 @@ ; CHECK: DW_TAG_subrange_type ; CHECK-NEXT: DW_AT_type [DW_FORM_ref4] (cu + 0x{{[0-9a-f]*}} => {[[BASE2:0x[0-9a-f]*]]}) ; CHECK-NEXT: DW_AT_lower_bound [DW_FORM_data8] (0xfffffffffffffffd) -; CHECK-NEXT: DW_AT_upper_bound [DW_FORM_data1] (0x26) +; CHECK-NEXT: DW_AT_count [DW_FORM_data1] (0x2a) ; CHECK: [[BASE]]: DW_TAG_base_type ; CHECK: [[BASE2]]: DW_TAG_base_type |