1176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// RUN: %clang_cc1 -triple %itanium_abi_triple -std=c++11 -fexceptions -fcxx-exceptions -fprofile-instr-generate -fcoverage-mapping -dump-coverage-mapping -emit-llvm-only -main-file-name trycatch.cpp %s | FileCheck %s
2176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
3176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesclass Error {
4176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines};
5176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
6176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesclass ImportantError {
7176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines};
8176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
9176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesclass Warning {
10176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines};
11176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
12176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines                                      // CHECK: func
130e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesvoid func(int i) {                    // CHECK-NEXT: File 0, [[@LINE]]:18 -> [[@LINE+6]]:2 = #0
140e2c34f92f00628d48968dfea096d36381f494cbStephen Hines  if(i % 2)                           // CHECK-NEXT: File 0, [[@LINE]]:6 -> [[@LINE]]:11 = #0
150e2c34f92f00628d48968dfea096d36381f494cbStephen Hines    throw Error();                    // CHECK-NEXT: File 0, [[@LINE]]:5 -> [[@LINE]]:18 = #1
160e2c34f92f00628d48968dfea096d36381f494cbStephen Hines                                      // CHECK-NEXT: File 0, [[@LINE+1]]:8 -> [[@LINE+2]]:27 = (#0 - #1)
170e2c34f92f00628d48968dfea096d36381f494cbStephen Hines  else if(i == 8)                     // CHECK-NEXT: File 0, [[@LINE]]:11 -> [[@LINE]]:17 = (#0 - #1)
180e2c34f92f00628d48968dfea096d36381f494cbStephen Hines    throw ImportantError();           // CHECK-NEXT: File 0, [[@LINE]]:5 -> [[@LINE]]:27 = #2
19176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines}
20176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
21176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines                                      // CHECK-NEXT: main
220e2c34f92f00628d48968dfea096d36381f494cbStephen Hinesint main() {                          // CHECK-NEXT: File 0, [[@LINE]]:12 -> [[@LINE+13]]:2 = #0
23176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  int j = 0;
24176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  try {
25176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines    func(j);
260e2c34f92f00628d48968dfea096d36381f494cbStephen Hines  } catch(const Error &e) {           // CHECK-NEXT: File 0, [[@LINE]]:27 -> [[@LINE+2]]:4 = #2
27176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines    j = 1;
280e2c34f92f00628d48968dfea096d36381f494cbStephen Hines  } catch(const ImportantError &e) {  // CHECK-NEXT: File 0, [[@LINE]]:36 -> [[@LINE+2]]:4 = #3
29176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines    j = 11;
30176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  }
310e2c34f92f00628d48968dfea096d36381f494cbStephen Hines  catch(const Warning &w) {           // CHECK-NEXT: File 0, [[@LINE]]:27 -> [[@LINE+2]]:4 = #4
32176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines    j = 0;
33176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  }
340e2c34f92f00628d48968dfea096d36381f494cbStephen Hines  return 0;                           // CHECK-NEXT: File 0, [[@LINE]]:3 -> [[@LINE]]:11 = #1
35176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines}
36