[all-commits] [llvm/llvm-project] 5834fe: [AutoUpgrade] Fix remangling when upgrading struct...

Fangrui Song via All-commits all-commits at lists.llvm.org
Mon Oct 24 04:49:56 PDT 2022


  Branch: refs/heads/release/15.x
  Home:   https://github.com/llvm/llvm-project
  Commit: 5834fe66318b55a54024fd93f69ab801a4c61d33
      https://github.com/llvm/llvm-project/commit/5834fe66318b55a54024fd93f69ab801a4c61d33
  Author: Nikita Popov <npopov at redhat.com>
  Date:   2022-10-24 (Mon, 24 Oct 2022)

  Changed paths:
    M llvm/lib/IR/AutoUpgrade.cpp
    M llvm/test/Assembler/opaque-ptr-intrinsic-remangling.ll

  Log Message:
  -----------
  [AutoUpgrade] Fix remangling when upgrading struct return type

This was remangling the old function rather than the new one, and
could result in failures when we were performing both a struct
return upgrade and an opaque pointer upgrade.

(cherry picked from commit c8938809d155682ef5eec170897b8c26b8cbf3ea)


  Commit: dccd0613025a6284e2a2296a56099b00a9dadcfe
      https://github.com/llvm/llvm-project/commit/dccd0613025a6284e2a2296a56099b00a9dadcfe
  Author: Fangrui Song <i at maskray.me>
  Date:   2022-10-24 (Mon, 24 Oct 2022)

  Changed paths:
    M lld/ELF/InputFiles.cpp
    A lld/test/ELF/comdat-binding2.s

  Log Message:
  -----------
  [ELF] Suppress "duplicate symbol" when resolving STB_WEAK and STB_GNU_UNIQUE in different COMDATs

```
template <typename T> struct A {
  A() {}
  int value = 0;
};

template <typename Value> struct B {
  static A<int> a;
};

template <typename Value> A<int> B<Value>::a;

inline int foo() {
  return B<int>::a.value;
}
```

```
clang++ -c -fno-pic a.cc -o weak.o
g++ -c -fno-pic a.cc -o unique.o  # --enable-gnu-unique-object

# Duplicate symbol error. In postParse, we do not check `sym.binding`
ld.lld -e 0 weak.o unique.o
```

Mixing GCC and Clang object files in this case is not ideal. .bss._ZGVN1BIiE1aE
has different COMDAT groups. It appears to work in practice because the guard
variable prevents harm due to double initialization.

For the linker, we just stick with the rule that a weak binding does not cause
"duplicate symbol" errors.

Close https://github.com/llvm/llvm-project/issues/58232

Differential Revision: https://reviews.llvm.org/D136381

(cherry picked from commit 0051b6bb78772b0658f28e5f31ddf91c1589aab5)


Compare: https://github.com/llvm/llvm-project/compare/5388da13992c...dccd0613025a


More information about the All-commits mailing list