forked from OSchip/llvm-project
[PGO] Cover more cases of implicitly generated C++ methods
llvm-svn: 260161
This commit is contained in:
parent
d416747803
commit
55adc9ddcc
|
@ -1,17 +1,51 @@
|
|||
// Ensure that implicit methods aren't instrumented.
|
||||
|
||||
// RUN: %clang_cc1 -x c++ %s -triple %itanium_abi_triple -main-file-name cxx-implicit.cpp -o - -emit-llvm -fprofile-instrument=clang | FileCheck %s
|
||||
// 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
|
||||
|
||||
// An implicit constructor is generated for Base. We should not emit counters
|
||||
// for it.
|
||||
// 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 Base {
|
||||
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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue