178 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			178 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
| // REQUIRES: shell
 | |
| 
 | |
| // Check that all of the hashes in this file are unique (i.e, that none of the
 | |
| // profiles for these functions are mutually interchangeable).
 | |
| //
 | |
| // RUN: llvm-profdata show -all-functions %S/Inputs/cxx-hash-v2.profdata.v5 | grep "Hash: 0x" | sort > %t.hashes
 | |
| // RUN: uniq %t.hashes > %t.hashes.unique
 | |
| // RUN: diff %t.hashes %t.hashes.unique
 | |
| 
 | |
| // RUN: llvm-profdata merge %S/Inputs/cxx-hash-v2.proftext -o %t.profdata
 | |
| // RUN: %clang_cc1 -std=c++11 -fexceptions -fcxx-exceptions -triple x86_64-apple-macosx10.9 -main-file-name cxx-hash-v2.mm %s -o /dev/null -emit-llvm -fprofile-instrument-use-path=%t.profdata 2>&1 | FileCheck %s -allow-empty
 | |
| // RUN: %clang_cc1 -std=c++11 -fexceptions -fcxx-exceptions -triple x86_64-apple-macosx10.9 -main-file-name cxx-hash-v2.mm %s -o /dev/null -emit-llvm -fprofile-instrument-use-path=%S/Inputs/cxx-hash-v2.profdata.v5 2>&1 | FileCheck %s -allow-empty
 | |
| 
 | |
| // CHECK-NOT: warning: profile data may be out of date
 | |
| 
 | |
| int x;
 | |
| int arr[1] = {0};
 | |
| 
 | |
| void loop_after_if_else() {
 | |
|   if (1)
 | |
|     x = 1;
 | |
|   else
 | |
|     x = 2;
 | |
|   while (0)
 | |
|     ++x;
 | |
| }
 | |
| 
 | |
| void loop_in_then_block() {
 | |
|   if (1) {
 | |
|     while (0)
 | |
|       ++x;
 | |
|   } else {
 | |
|     x = 2;
 | |
|   }
 | |
| }
 | |
| 
 | |
| void loop_in_else_block() {
 | |
|   if (1) {
 | |
|     x = 1;
 | |
|   } else {
 | |
|     while (0)
 | |
|       ++x;
 | |
|   }
 | |
| }
 | |
| 
 | |
| void if_inside_of_for() {
 | |
|   for (x = 0; x < 0; ++x) {
 | |
|     x = 1;
 | |
|     if (1)
 | |
|       x = 2;
 | |
|   }
 | |
| }
 | |
| 
 | |
| void if_outside_of_for() {
 | |
|   for (x = 0; x < 0; ++x)
 | |
|     x = 1;
 | |
|   if (1)
 | |
|     x = 2;
 | |
| }
 | |
| 
 | |
| void if_inside_of_while() {
 | |
|   while (0) {
 | |
|     x = 1;
 | |
|     if (1)
 | |
|       x = 2;
 | |
|   }
 | |
| }
 | |
| 
 | |
| void if_outside_of_while() {
 | |
|   while (0)
 | |
|     x = 1;
 | |
|   if (1)
 | |
|     x = 2;
 | |
| }
 | |
| 
 | |
| void nested_dos() {
 | |
|   do {
 | |
|     do {
 | |
|       ++x;
 | |
|     } while (0);
 | |
|   } while (0);
 | |
| }
 | |
| 
 | |
| void consecutive_dos() {
 | |
|   do {
 | |
|   } while (0);
 | |
|   do {
 | |
|     ++x;
 | |
|   } while (0);
 | |
| }
 | |
| 
 | |
| void loop_empty() {
 | |
|   for (x = 0; x < 5; ++x) {}
 | |
| }
 | |
| 
 | |
| void loop_return() {
 | |
|   for (x = 0; x < 5; ++x)
 | |
|     return;
 | |
| }
 | |
| 
 | |
| void loop_continue() {
 | |
|   for (x = 0; x < 5; ++x)
 | |
|     continue;
 | |
| }
 | |
| 
 | |
| void loop_break() {
 | |
|   for (x = 0; x < 5; ++x)
 | |
|     break;
 | |
| }
 | |
| 
 | |
| void no_gotos() {
 | |
|   static void *dispatch[] = {&&done};
 | |
|   x = 0;
 | |
| done:
 | |
|   ++x;
 | |
| }
 | |
| 
 | |
| void direct_goto() {
 | |
|   static void *dispatch[] = {&&done};
 | |
|   x = 0;
 | |
|   goto done;
 | |
| done:
 | |
|   ++x;
 | |
| }
 | |
| 
 | |
| void indirect_goto() {
 | |
|   static void *dispatch[] = {&&done};
 | |
|   x = 0;
 | |
|   goto *dispatch[x];
 | |
| done:
 | |
|   ++x;
 | |
| }
 | |
| 
 | |
| void nested_for_ranges() {
 | |
|   for (int a : arr)
 | |
|     for (int b : arr)
 | |
|       ++x;
 | |
| }
 | |
| 
 | |
| void consecutive_for_ranges() {
 | |
|   for (int a : arr) {}
 | |
|   for (int b : arr)
 | |
|     ++x;
 | |
| }
 | |
| 
 | |
| void nested_try_catch() {
 | |
|   try {
 | |
|     try {
 | |
|       ++x;
 | |
|     } catch (...) {}
 | |
|   } catch (...) {}
 | |
| }
 | |
| 
 | |
| void consecutive_try_catch() {
 | |
|   try {} catch (...) {}
 | |
|   try {
 | |
|     ++x;
 | |
|   } catch (...) {}
 | |
| }
 | |
| 
 | |
| void no_throw() {}
 | |
| 
 | |
| void has_throw() {
 | |
|   throw 0;
 | |
| }
 | |
| 
 | |
| void single_lnot() {
 | |
|   if (!x) {}
 | |
| }
 | |
| 
 | |
| void double_lnot() {
 | |
|   if (!!x) {}
 | |
| }
 | |
| 
 | |
| int main() {
 | |
|   return 0;
 | |
| }
 |