diff options
| author | Reid Kleckner <rnk@google.com> | 2017-04-03 23:58:15 +0000 |
|---|---|---|
| committer | Reid Kleckner <rnk@google.com> | 2017-04-03 23:58:15 +0000 |
| commit | c4b5d794f1fe2ebb3a3c770d978d7cc7fe389b91 (patch) | |
| tree | 3f98b6176fac76c33e0a1657554dc476dfb16d4f /llvm/test | |
| parent | 48a15fd9f180feb705d1d1c25b38d4f2e0c9e693 (diff) | |
| download | bcm5719-llvm-c4b5d794f1fe2ebb3a3c770d978d7cc7fe389b91.tar.gz bcm5719-llvm-c4b5d794f1fe2ebb3a3c770d978d7cc7fe389b91.zip | |
[codeview] Cope with unsorted streams in type merging
Summary:
MASM can produce type streams that are not topologically sorted. It can
even produce type streams with circular references, but those are not
common in practice.
Reviewers: inglorion, ruiu
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D31629
llvm-svn: 299403
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/tools/llvm-readobj/Inputs/codeview-cycle.obj | bin | 0 -> 1034 bytes | |||
| -rw-r--r-- | llvm/test/tools/llvm-readobj/Inputs/codeview-unsorted.obj | bin | 0 -> 1058 bytes | |||
| -rw-r--r-- | llvm/test/tools/llvm-readobj/codeview-merging-cycle.test | 19 | ||||
| -rw-r--r-- | llvm/test/tools/llvm-readobj/codeview-merging-unsorted.test | 40 |
4 files changed, 59 insertions, 0 deletions
diff --git a/llvm/test/tools/llvm-readobj/Inputs/codeview-cycle.obj b/llvm/test/tools/llvm-readobj/Inputs/codeview-cycle.obj Binary files differnew file mode 100644 index 00000000000..85c2d0e55fe --- /dev/null +++ b/llvm/test/tools/llvm-readobj/Inputs/codeview-cycle.obj diff --git a/llvm/test/tools/llvm-readobj/Inputs/codeview-unsorted.obj b/llvm/test/tools/llvm-readobj/Inputs/codeview-unsorted.obj Binary files differnew file mode 100644 index 00000000000..08a376de3b9 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/Inputs/codeview-unsorted.obj diff --git a/llvm/test/tools/llvm-readobj/codeview-merging-cycle.test b/llvm/test/tools/llvm-readobj/codeview-merging-cycle.test new file mode 100644 index 00000000000..3a96be9ca98 --- /dev/null +++ b/llvm/test/tools/llvm-readobj/codeview-merging-cycle.test @@ -0,0 +1,19 @@ +; RUN: not llvm-readobj -codeview-merged-types %S/Inputs/codeview-cycle.obj 2>&1 | FileCheck %s + +; CHECK: Error{{.*}} input type graph contains cycles + +; To reproduce codeview-cycle.obj: +; $ cat codeview-cycle.asm +; .model flat, C +; .code +; pfoo_list TYPEDEF PTR foo_list +; foo_list STRUCT +; next pfoo_list ? +; data dd ? +; foo_list ENDS +; public foo +; foo proc dst:ptr foo_list +; ret +; foo endp +; end +; $ ml -c -Zi codeview-cycle.asm diff --git a/llvm/test/tools/llvm-readobj/codeview-merging-unsorted.test b/llvm/test/tools/llvm-readobj/codeview-merging-unsorted.test new file mode 100644 index 00000000000..6aaab3a891e --- /dev/null +++ b/llvm/test/tools/llvm-readobj/codeview-merging-unsorted.test @@ -0,0 +1,40 @@ +; RUN: llvm-readobj -codeview %S/Inputs/codeview-unsorted.obj | FileCheck %s +; RUN: llvm-readobj -codeview-merged-types %S/Inputs/codeview-unsorted.obj | FileCheck %s --check-prefix=MERGED + +; The input type stream has records that refer to later type indices in the same +; stream: + +; CHECK: Pointer (0x1000) +; CHECK: Struct (0x1001) +; CHECK: FieldList: {{.*}} (0x1002) +; CHECK: FieldList (0x1002) +; CHECK: Pointer (0x1003) +; CHECK: Procedure (0x1004) +; CHECK: ArgListType: {{.*}} (0x1005) +; CHECK: ArgList (0x1005) + +; MERGED: Pointer (0x1000) +; MERGED: FieldList (0x1001) +; MERGED: Struct (0x1002) +; MERGED: FieldList: {{.*}} (0x1001) +; MERGED: Pointer (0x1003) +; MERGED: ArgList (0x1004) +; MERGED: Procedure (0x1005) +; MERGED: ArgListType: {{.*}} (0x1004) + + +; To reproduce codeview-unsorted.obj: +; $ cat codeview-unsorted.asm +; .model flat, C +; .code +; PBYTE TYPEDEF PTR BYTE +; foo_list STRUCT +; next PBYTE ? +; data dd ? +; foo_list ENDS +; public foo +; foo proc dst:ptr foo_list +; ret +; foo endp +; end +; $ ml -c -Zi codeview-unsorted.asm |

