r260161 - [PGO] Cover more cases of implicitly generated C++ methods
Xinliang David Li via cfe-commits
cfe-commits at lists.llvm.org
Mon Feb 8 14:41:38 PST 2016
Author: davidxl
Date: Mon Feb 8 16:41:37 2016
New Revision: 260161
URL: http://llvm.org/viewvc/llvm-project?rev=260161&view=rev
Log:
[PGO] Cover more cases of implicitly generated C++ methods
Modified:
cfe/trunk/test/Profile/cxx-implicit.cpp
Modified: cfe/trunk/test/Profile/cxx-implicit.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Profile/cxx-implicit.cpp?rev=260161&r1=260160&r2=260161&view=diff
==============================================================================
--- cfe/trunk/test/Profile/cxx-implicit.cpp (original)
+++ cfe/trunk/test/Profile/cxx-implicit.cpp Mon Feb 8 16:41:37 2016
@@ -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;
+}
More information about the cfe-commits
mailing list