Skip to content

[abi] mangled name issues for requires-clauses. #90046

Open
@hokein

Description

@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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    ABIApplication Binary Interfaceclang:frontendLanguage frontend issues, e.g. anything involving "Sema"tools:llvm-cxxfilt

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions