| // 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_ |
| } |