Issue 108009
Summary [abi] method parameter mangled as a substitution does not demangle correctly
Labels clang:frontend, ABI
Assignees VitaNuo
Reporter VitaNuo
    While fiddling with the LLVM demangler, I noticed that in the following example 

```
template <typename T>
struct Bar{};

template <typename K>
struct Foo {
  template <typename T, template<typename U> typename S>
  void method(S<T> t, S<K> k);
};

void s() {
 Foo<int> k;
   Bar<int> i;
   Bar<bool> b;
   k.method(b, i);
}
```

the call `k.method(b, i)` is mangled as `_ZN3FooIiE6methodIb3BarEEvT0_IT_ES3_IiE`, which appears right (`Foo<int>::method<bool, Bar>(Bar<bool>, Bar<int>)`).
However, running the demangler

```
llvm-cxxfilt -n _ZN3FooIiE6methodIb3BarEEvT0_IT_ES3_IiE
```

produces `void Foo<int>::method<bool, Bar>(Bar<bool>, bool<int>)`.

`bool<int>` is obviously wrong and seems to stem from the `S3_` substitution.
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to