45 lines
		
	
	
		
			921 B
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			921 B
		
	
	
	
		
			C++
		
	
	
	
// RUN: %clang_cc1 -mllvm -emptyline-comment-coverage=false -fprofile-instrument=clang -fcoverage-mapping -dump-coverage-mapping -emit-llvm-only -std=c++11 %s | FileCheck %s
 | 
						|
 | 
						|
#define BREAK break
 | 
						|
 | 
						|
enum class MD {
 | 
						|
  Val1,
 | 
						|
  Val2
 | 
						|
};
 | 
						|
 | 
						|
void nop() {}
 | 
						|
 | 
						|
// CHECK: foo
 | 
						|
// CHECK-NEXT: File 0, [[@LINE+1]]:16 -> {{[0-9]+}}:2 = #0
 | 
						|
void foo(MD i) {
 | 
						|
  switch (i) {
 | 
						|
  #define HANDLE_MD(X)                                          \
 | 
						|
  case MD::X:                                                   \
 | 
						|
    break;
 | 
						|
  #include "Inputs/md.def"
 | 
						|
  default:
 | 
						|
    BREAK;
 | 
						|
  }
 | 
						|
 | 
						|
  if (false)
 | 
						|
    nop();
 | 
						|
  #define HANDLE_MD(X) else if (i == MD::X) { nop(); }
 | 
						|
  #include "Inputs/md.def"
 | 
						|
}
 | 
						|
 | 
						|
// CHECK: bar
 | 
						|
// CHECK-NEXT: File 0, [[@LINE+3]]:12 -> [[@LINE+8]]:2 = #0
 | 
						|
bool isVal1();
 | 
						|
bool isVal2();
 | 
						|
bool bar() {
 | 
						|
 #define HANDLE_MD(X) is##X() ||
 | 
						|
  return
 | 
						|
#include "Inputs/md.def"
 | 
						|
  0;
 | 
						|
}
 | 
						|
 | 
						|
int main(int argc, const char *argv[]) {
 | 
						|
  foo(MD::Val1);
 | 
						|
  return 0;
 | 
						|
}
 |