Issue 90046
Summary [abi] mangled name issues for requires-clauses.
Labels clang:frontend, tools:llvm-cxxfilt, ABI
Assignees
Reporter hokein
    Example 1:

```
template <typename T>
concept C = true;

template <typename T>
struct Foo {
  template <typename F>
  explicit Foo(F f)
    requires requires {
      requires C<F>;
    }
 {}
};

void k() {
 // mangled name for the Foo<double>::Foo constructor: _ZN3FooIdEC2IiEET_QrqQ1CITL0__EE
 Foo<double> f(1);
}
```

The mangled name `_ZN3FooIdEC2IiEET_QrqQ1CITL0__EE` is demangled incorrectly (note that `TL0`):

```
$ ./bin/llvm-cxxfilt _ZN3FooIdEC2IiEET_QrqQ1CITL0__EE
Foo<double>::Foo<int>(int) requires requires { requires C<TL0_>; }
```

Example 2:

```
template <typename T>
concept C = true;
template <typename T, typename U>
concept C2 = true;

template <typename T>
struct Foo {
  template <typename F>
  explicit Foo(F f)
 requires requires {
      requires C<Foo>;
      requires C<T>;
 requires C2<F, F>;
    }
  {}
};

void k() {
   // mangled name is _ZN3FooIdEC2IiEET_QrqQ1CIS_IS2_EEQ1CIS2_EQ2C2ITL0__S5_EE
 Foo<double> f(1);
}
```

The mangled name can not be demangled by `llvm-cxxfilt`.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to