// RUN: %clang_cc1 -std=c++2b -emit-llvm -triple x86_64-linux -o - %s 2>/dev/null | FileCheck %s struct S { friend void test(); public: void a(this auto){} void b(this auto&){} void c(this S){} void c(this S, int){} private: void d(this auto){} void e(this auto&){} void f(this S){} void f(this S, int){} protected: void g(this auto){} void h(this auto&){} void i(this S){} void i(this S, int){} }; void test() { S s; s.a(); // CHECK: call void @_ZNH1S1aIS_EEvT_ s.b(); // CHECK: call void @_ZNH1S1bIS_EEvRT_ s.c(); // CHECK: call void @_ZNH1S1cES_ s.c(0); // CHECK: call void @_ZNH1S1cES_i s.d(); // CHECK: call void @_ZNH1S1dIS_EEvT_ s.e(); // CHECK: call void @_ZNH1S1eIS_EEvRT_ s.f(); // CHECK: call void @_ZNH1S1fES_ s.f(0); // CHECK: call void @_ZNH1S1fES_i s.g(); // CHECK: call void @_ZNH1S1gIS_EEvT_ s.h(); // CHECK: call void @_ZNH1S1hIS_EEvRT_ s.i(); // CHECK: call void @_ZNH1S1iES_ s.i(0); // CHECK: call void @_ZNH1S1iES_i } struct StaticAndExplicit { static void f(StaticAndExplicit); void f(this StaticAndExplicit); }; void test2() { StaticAndExplicit s; StaticAndExplicit::f(s); // CHECK: call void @_ZN17StaticAndExplicit1fES_ s.f(); // CHECK: call void @_ZNH17StaticAndExplicit1fES_ }