[InstCombine] Preserve NSW flags for `lshr (mul nuw X, C1), C2 -> mul nuw nsw X,...
[llvm-project.git] / clang / test / CodeGenCXX / debug-info-scope.cpp
bloba90ad83e7c5a6a9dc972e41377bf5c8782743a2a
1 // RUN: %clang_cc1 -debug-info-kind=limited -gno-column-info -std=c++11 -emit-llvm %s -o -| FileCheck %s
2 //
3 // Two variables with the same name in subsequent if staments need to be in separate scopes.
5 int src();
7 void f();
9 void func() {
10 // CHECK: = !DILocalVariable(name: "i"
11 // CHECK-SAME: scope: [[IF1:![0-9]*]]
12 // CHECK-SAME: line: [[@LINE+2]]
13 // CHECK: [[IF1]] = distinct !DILexicalBlock({{.*}}line: [[@LINE+1]])
14 if (int i = src())
15 f();
17 // CHECK: = !DILocalVariable(name: "i"
18 // CHECK-SAME: scope: [[IF2:![0-9]*]]
19 // CHECK-SAME: line: [[@LINE+2]]
20 // CHECK: [[IF2]] = distinct !DILexicalBlock({{.*}}line: [[@LINE+1]])
21 if (int i = src()) {
22 f();
23 } else
24 f();
26 // CHECK: = !DILocalVariable(name: "i"
27 // CHECK-SAME: scope: [[FOR:![0-9]*]]
28 // CHECK-SAME: line: [[@LINE+2]]
29 // CHECK: [[FOR]] = distinct !DILexicalBlock({{.*}}line: [[@LINE+1]])
30 for (int i = 0;
31 // CHECK: = !DILocalVariable(name: "b"
32 // CHECK-SAME: scope: [[FOR_BODY:![0-9]*]]
33 // CHECK-SAME: line: [[@LINE+6]]
34 // CHECK: [[FOR_BODY]] = distinct !DILexicalBlock({{.*}}line: [[@LINE-4]])
35 // The scope could be located at 'bool b', but LLVM drops line information for
36 // scopes anyway, so it's not terribly important.
37 // FIXME: change the debug info schema to not include locations of scopes,
38 // since they're not used.
39 bool b = i != 10; ++i)
40 f();
42 // CHECK: = !DILocalVariable(name: "i"
43 // CHECK-SAME: scope: [[FOR:![0-9]*]]
44 // CHECK-SAME: line: [[@LINE+2]]
45 // CHECK: [[FOR]] = distinct !DILexicalBlock({{.*}}line: [[@LINE+1]])
46 for (int i = 0; i != 10; ++i) {
47 // FIXME: Do not include scopes that have only other scopes (and no variables
48 // or using declarations) as direct children, they just waste
49 // space/relocations/etc.
50 // CHECK: [[FOR_LOOP_INCLUDING_COND:!.*]] = distinct !DILexicalBlock(scope: [[FOR]],{{.*}} line: [[@LINE-4]])
51 // CHECK: = !DILocalVariable(name: "b"
52 // CHECK-SAME: scope: [[FOR_COMPOUND:![0-9]*]]
53 // CHECK-SAME: line: [[@LINE+2]]
54 // CHECK: [[FOR_COMPOUND]] = distinct !DILexicalBlock(scope: [[FOR_LOOP_INCLUDING_COND]],{{.*}} line: [[@LINE-8]])
55 bool b = i % 2;
58 int x[] = {1, 2};
59 // CHECK: = !DILocalVariable(name: "__range1"
60 // CHECK-SAME: scope: [[RANGE_FOR:![0-9]*]]
61 // CHECK-NOT: line:
62 // CHECK-SAME: ){{$}}
63 // CHECK: [[RANGE_FOR]] = distinct !DILexicalBlock({{.*}}, line: [[@LINE+1]])
64 for (int i : x) {
65 // CHECK: = !DILocalVariable(name: "i"
66 // CHECK-SAME: scope: [[RANGE_FOR_BODY:![0-9]*]]
67 // CHECK-SAME: line: [[@LINE-3]]
68 // CHECK: [[RANGE_FOR_BODY]] = distinct !DILexicalBlock(scope: [[RANGE_FOR]],{{.*}} line: [[@LINE-4]])