1 // RUN: %clang_cc1 -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
2 
3 class Error {
4 };
5 
6 class ImportantError {
7 };
8 
9 class Warning {
10 };
11 
12 void func(int i) {
13   if(i % 2)
14     throw Error();
15   else if(i == 8)
16     throw ImportantError();
17 }
18 
19 // CHECK: func
20 // CHECK-NEXT: File 0, 12:18 -> 17:2 = #0 (HasCodeBefore = 0)
21 // CHECK-NEXT: File 0, 14:5 -> 14:16 = #1 (HasCodeBefore = 0)
22 // CHECK-NEXT: File 0, 15:8 -> 15:17 = (#0 - #1) (HasCodeBefore = 0)
23 // CHECK-NEXT: File 0, 16:5 -> 16:25 = #2 (HasCodeBefore = 0)
24 
25 int main() {
26   int j = 0;
27   for(int i = 0; i < 9; ++i) {
28     try {
29       func(i);
30     } catch(const Error &e) {
31       j = 1;
32     } catch(const ImportantError &e) {
33       j = 11;
34     }
35     catch(const Warning &w) {
36       j = 0;
37     }
38   }
39   return 0;
40 }
41 
42 // CHECK-NEXT: main
43 // CHECK-NEXT: File 0, 25:12 -> 40:2 = #0 (HasCodeBefore = 0)
44 // CHECK-NEXT: File 0, 27:18 -> 27:23 = (#0 + #2) (HasCodeBefore = 0)
45 // CHECK-NEXT: File 0, 27:25 -> 27:28 = #2 (HasCodeBefore = 0)
46 // CHECK-NEXT: File 0, 27:30 -> 38:4 = #1 (HasCodeBefore = 0)
47 // CHECK-NEXT: File 0, 30:29 -> 32:12 = #3 (HasCodeBefore = 0)
48 // CHECK-NEXT: File 0, 32:38 -> 35:10 = #4 (HasCodeBefore = 0)
49 // CHECK-NEXT: File 0, 35:29 -> 37:6 = #5 (HasCodeBefore = 0)
50 // CHECK-NEXT: File 0, 39:3 -> 39:11 = ((#0 + #2) - #1) (HasCodeBefore = 0)
51