Mercurial > hg > CbC > CbC_llvm
view clang/test/Profile/cxx-implicit.cpp @ 237:c80f45b162ad llvm-original
add some fix
author | kono |
---|---|
date | Wed, 09 Nov 2022 17:47:54 +0900 |
parents | 1d019706d866 |
children |
line wrap: on
line source
// Ensure that implicit methods aren't instrumented. // RUN: %clang_cc1 -x c++ -std=c++11 %s -triple %itanium_abi_triple -main-file-name cxx-implicit.cpp -o - -emit-llvm -fprofile-instrument=clang | FileCheck %s // Implicit constructors are generated for Base. We should not emit counters // for them. // CHECK-DAG: define {{.*}}_ZN4BaseC2Ev // CHECK-DAG: define {{.*}}_ZN4BaseC2ERKS_ // CHECK-DAG: define {{.*}}_ZN4BaseC2EOS_ // CHECK-DAG: __profc__ZN7DerivedC2Ev, // CHECK-DAG: __profc__ZN7DerivedC2ERKS_ // CHECK-DAG: __profc__ZN7DerivedC2EOS_ // CHECK-NOT: @__profc__ZN4BaseC2Ev = // CHECK-NOT: @__profc__ZN4BaseC2ERKS_ // CHECK-NOT: @__profc__ZN4BaseC2EOS_ // // Implicit assignment operators are generated for Base. We should not emit counters // for them. // CHECK-NOT: @__profc__ZN4BaseaSEOS_ // CHECK-NOT: @__profc__ZN4BaseaSERKS_ struct BaseBase { BaseBase(); BaseBase(const BaseBase &); BaseBase &operator=(const BaseBase &); BaseBase &operator=(BaseBase &&); }; struct Base : public BaseBase { virtual void foo(); }; struct Derived : public Base { Derived(); Derived(const Derived &); Derived(Derived &&); Derived &operator=(const Derived &); Derived &operator=(Derived &&); }; Derived::Derived() {} Derived::Derived(const Derived &d) : Base(d) {} Derived::Derived(Derived &&d) : Base(static_cast<Base&&>(d)) {} Derived& Derived::operator=(const Derived &d) { Base::operator=(d); return *this; } Derived& Derived::operator=(Derived &&d) { Base::operator=(static_cast<Base &&>(d)); return *this; }