brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.5 KiB · 40598bf Raw
52 lines · cpp
1// Ensure that implicit methods aren't instrumented.2 3// 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 %s4 5// Implicit constructors are generated for Base. We should not emit counters6// for them.7// CHECK-DAG: define {{.*}}_ZN4BaseC2Ev8// CHECK-DAG: define {{.*}}_ZN4BaseC2ERKS_9// CHECK-DAG: define {{.*}}_ZN4BaseC2EOS_10// CHECK-DAG: __profc__ZN7DerivedC2Ev,11// CHECK-DAG: __profc__ZN7DerivedC2ERKS_12// CHECK-DAG: __profc__ZN7DerivedC2EOS_13// CHECK-NOT: @__profc__ZN4BaseC2Ev =14// CHECK-NOT: @__profc__ZN4BaseC2ERKS_15// CHECK-NOT: @__profc__ZN4BaseC2EOS_16//17// Implicit assignment operators are generated for Base. We should not emit counters18// for them.19// CHECK-NOT: @__profc__ZN4BaseaSEOS_20// CHECK-NOT: @__profc__ZN4BaseaSERKS_21 22struct BaseBase {23 BaseBase();24 BaseBase(const BaseBase &);25 BaseBase &operator=(const BaseBase &);26 BaseBase &operator=(BaseBase &&);27};28 29struct Base : public BaseBase {30  virtual void foo();31};32 33struct Derived : public Base {34  Derived();35  Derived(const Derived &);36  Derived(Derived &&);37  Derived &operator=(const Derived &);38  Derived &operator=(Derived &&);39};40 41Derived::Derived() {}42Derived::Derived(const Derived &d) : Base(d) {}43Derived::Derived(Derived &&d) : Base(static_cast<Base&&>(d)) {}44Derived& Derived::operator=(const Derived &d) {45  Base::operator=(d);46  return *this;47}48Derived& Derived::operator=(Derived &&d) {49  Base::operator=(static_cast<Base &&>(d));50  return *this;51}52