forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			52 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
// Ensure that implicit methods aren't instrumented.
 | 
						|
 | 
						|
// 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
 | 
						|
 | 
						|
// 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 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;
 | 
						|
}
 |