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; +} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits