Skip to content
Snippets Groups Projects
Commit 4880b6df authored by Xinliang David Li's avatar Xinliang David Li
Browse files

[PGO] Cover more cases of implicitly generated C++ methods

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@260161 91177308-0d34-0410-b5e6-96231b3b80d8
parent 34f668de
No related branches found
No related tags found
No related merge requests found
// Ensure that implicit methods aren't instrumented. // 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 // Implicit constructors are generated for Base. We should not emit counters
// for it. // 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__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(); virtual void foo();
}; };
struct Derived : public Base { struct Derived : public Base {
Derived(); Derived();
Derived(const Derived &);
Derived(Derived &&);
Derived &operator=(const Derived &);
Derived &operator=(Derived &&);
}; };
Derived::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;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment