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