[PATCH] D88423: Fix llvm-link assert failure in BitCodeWriter

Richard Smith - zygoloid via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 28 18:26:57 PDT 2020


rsmith added a comment.

Text IR printing is still incorrect



================
Comment at: llvm/test/Linker/sret-types.ll:1
+; RUN: llvm-link %s %p/Inputs/sret-types-1.ll | llvm-dis | FileCheck %s
+
----------------
dblaikie wrote:
> rsmith wrote:
> > Simpler testcase (from https://reviews.llvm.org/D88241#2299465):
> > 
> > ```
> > $ cat c.ll
> > define void @f(i8* sret({i64})) { ret void }
> > $ ./build/bin/opt - -o /tmp/tmp.ir # or anything that converts text IR to bitcode
> > ```
> > 
> > There appear to be two issues here: the linker is not properly linking types inside attributes, and the value enumerator doesn't number types inside attributes. (I'm not sure if the linker relies on the value enumerator; maybe this patch fixes both issues, maybe not.)
> If you have a chance, could you try this patch with both the test cases you posted over there? See if it does address both issues?
This patch does *not* fix the failure of `llvm-link` to link together the modules properly. Indeed, this test fails if we:

```
-; RUN: llvm-link %s %p/Inputs/sret-types-1.ll | llvm-dis | FileCheck %s
+; RUN: llvm-link %s %p/Inputs/sret-types-1.ll -S -o - | FileCheck %s
```

... because it generates incorrect output that looks like:

```
; ModuleID = 'llvm-link'
source_filename = "llvm-link"

%v = type { i32 }

define void @g(%v* %0) {
  ret void
}

define void @f(%v* sret(%"type 0x2c18b30") %0) {
  ret void
}
```

So I guess there are actually *three* different bugs here: fixing the issue for the bitcode writer (as I can confirm this patch does) does not fix the corresponding issue for the textual IR printing.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D88423/new/

https://reviews.llvm.org/D88423



More information about the llvm-commits mailing list