Douglas Katzman | 3459ce2 | 2015-10-08 04:24:12 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 -debug-info-kind=limited -std=c++11 -emit-llvm %s -o -| FileCheck %s |
Adrian Prantl | 0ffce6e | 2013-06-08 00:16:55 +0000 | [diff] [blame] | 2 | // |
| 3 | // Two variables with the same name in subsequent if staments need to be in separate scopes. |
| 4 | // |
| 5 | // rdar://problem/14024005 |
Adrian Prantl | 0ffce6e | 2013-06-08 00:16:55 +0000 | [diff] [blame] | 6 | |
David Blaikie | 93be0b2 | 2014-08-22 21:37:04 +0000 | [diff] [blame] | 7 | int src(); |
Adrian Prantl | 0ffce6e | 2013-06-08 00:16:55 +0000 | [diff] [blame] | 8 | |
David Blaikie | 93be0b2 | 2014-08-22 21:37:04 +0000 | [diff] [blame] | 9 | void f(); |
Adrian Prantl | 0ffce6e | 2013-06-08 00:16:55 +0000 | [diff] [blame] | 10 | |
David Blaikie | 93be0b2 | 2014-08-22 21:37:04 +0000 | [diff] [blame] | 11 | void func() { |
Duncan P. N. Exon Smith | 38a7f11 | 2015-07-31 18:59:37 +0000 | [diff] [blame] | 12 | // CHECK: = !DILocalVariable(name: "i" |
Duncan P. N. Exon Smith | f04be1f | 2015-03-03 17:25:55 +0000 | [diff] [blame] | 13 | // CHECK-SAME: scope: [[IF1:![0-9]*]] |
| 14 | // CHECK-SAME: line: [[@LINE+2]] |
Duncan P. N. Exon Smith | 9dd4e4e | 2015-04-29 16:40:08 +0000 | [diff] [blame] | 15 | // CHECK: [[IF1]] = distinct !DILexicalBlock({{.*}}line: [[@LINE+1]]) |
David Blaikie | 93be0b2 | 2014-08-22 21:37:04 +0000 | [diff] [blame] | 16 | if (int i = src()) |
| 17 | f(); |
| 18 | |
Duncan P. N. Exon Smith | 38a7f11 | 2015-07-31 18:59:37 +0000 | [diff] [blame] | 19 | // CHECK: = !DILocalVariable(name: "i" |
Duncan P. N. Exon Smith | f04be1f | 2015-03-03 17:25:55 +0000 | [diff] [blame] | 20 | // CHECK-SAME: scope: [[IF2:![0-9]*]] |
| 21 | // CHECK-SAME: line: [[@LINE+2]] |
Duncan P. N. Exon Smith | 9dd4e4e | 2015-04-29 16:40:08 +0000 | [diff] [blame] | 22 | // CHECK: [[IF2]] = distinct !DILexicalBlock({{.*}}line: [[@LINE+1]]) |
David Blaikie | 93be0b2 | 2014-08-22 21:37:04 +0000 | [diff] [blame] | 23 | if (int i = src()) { |
| 24 | f(); |
| 25 | } else |
| 26 | f(); |
| 27 | |
Duncan P. N. Exon Smith | 38a7f11 | 2015-07-31 18:59:37 +0000 | [diff] [blame] | 28 | // CHECK: = !DILocalVariable(name: "i" |
Duncan P. N. Exon Smith | f04be1f | 2015-03-03 17:25:55 +0000 | [diff] [blame] | 29 | // CHECK-SAME: scope: [[FOR:![0-9]*]] |
| 30 | // CHECK-SAME: line: [[@LINE+2]] |
Duncan P. N. Exon Smith | 9dd4e4e | 2015-04-29 16:40:08 +0000 | [diff] [blame] | 31 | // CHECK: [[FOR]] = distinct !DILexicalBlock({{.*}}line: [[@LINE+1]]) |
David Blaikie | 93be0b2 | 2014-08-22 21:37:04 +0000 | [diff] [blame] | 32 | for (int i = 0; |
Duncan P. N. Exon Smith | 38a7f11 | 2015-07-31 18:59:37 +0000 | [diff] [blame] | 33 | // CHECK: = !DILocalVariable(name: "b" |
Duncan P. N. Exon Smith | f04be1f | 2015-03-03 17:25:55 +0000 | [diff] [blame] | 34 | // CHECK-SAME: scope: [[FOR_BODY:![0-9]*]] |
| 35 | // CHECK-SAME: line: [[@LINE+6]] |
Duncan P. N. Exon Smith | 9dd4e4e | 2015-04-29 16:40:08 +0000 | [diff] [blame] | 36 | // CHECK: [[FOR_BODY]] = distinct !DILexicalBlock({{.*}}line: [[@LINE-4]]) |
David Blaikie | 93be0b2 | 2014-08-22 21:37:04 +0000 | [diff] [blame] | 37 | // The scope could be located at 'bool b', but LLVM drops line information for |
| 38 | // scopes anyway, so it's not terribly important. |
| 39 | // FIXME: change the debug info schema to not include locations of scopes, |
| 40 | // since they're not used. |
David Blaikie | 93be0b2 | 2014-08-22 21:37:04 +0000 | [diff] [blame] | 41 | bool b = i != 10; ++i) |
| 42 | f(); |
| 43 | |
Duncan P. N. Exon Smith | 38a7f11 | 2015-07-31 18:59:37 +0000 | [diff] [blame] | 44 | // CHECK: = !DILocalVariable(name: "i" |
Duncan P. N. Exon Smith | f04be1f | 2015-03-03 17:25:55 +0000 | [diff] [blame] | 45 | // CHECK-SAME: scope: [[FOR:![0-9]*]] |
| 46 | // CHECK-SAME: line: [[@LINE+2]] |
Duncan P. N. Exon Smith | 9dd4e4e | 2015-04-29 16:40:08 +0000 | [diff] [blame] | 47 | // CHECK: [[FOR]] = distinct !DILexicalBlock({{.*}}line: [[@LINE+1]]) |
David Blaikie | 93be0b2 | 2014-08-22 21:37:04 +0000 | [diff] [blame] | 48 | for (int i = 0; i != 10; ++i) { |
David Blaikie | 66e4197 | 2015-01-14 07:38:27 +0000 | [diff] [blame] | 49 | // FIXME: Do not include scopes that have only other scopes (and no variables |
| 50 | // or using declarations) as direct children, they just waste |
| 51 | // space/relocations/etc. |
Duncan P. N. Exon Smith | 9dd4e4e | 2015-04-29 16:40:08 +0000 | [diff] [blame] | 52 | // CHECK: [[FOR_LOOP_INCLUDING_COND:!.*]] = distinct !DILexicalBlock(scope: [[FOR]],{{.*}} line: [[@LINE-4]]) |
Duncan P. N. Exon Smith | 38a7f11 | 2015-07-31 18:59:37 +0000 | [diff] [blame] | 53 | // CHECK: = !DILocalVariable(name: "b" |
Duncan P. N. Exon Smith | f04be1f | 2015-03-03 17:25:55 +0000 | [diff] [blame] | 54 | // CHECK-SAME: scope: [[FOR_COMPOUND:![0-9]*]] |
| 55 | // CHECK-SAME: line: [[@LINE+2]] |
Duncan P. N. Exon Smith | 9dd4e4e | 2015-04-29 16:40:08 +0000 | [diff] [blame] | 56 | // CHECK: [[FOR_COMPOUND]] = distinct !DILexicalBlock(scope: [[FOR_LOOP_INCLUDING_COND]],{{.*}} line: [[@LINE-8]]) |
David Blaikie | 93be0b2 | 2014-08-22 21:37:04 +0000 | [diff] [blame] | 57 | bool b = i % 2; |
Adrian Prantl | 0ffce6e | 2013-06-08 00:16:55 +0000 | [diff] [blame] | 58 | } |
David Blaikie | ac0a5c4 | 2014-08-22 21:54:29 +0000 | [diff] [blame] | 59 | |
| 60 | int x[] = {1, 2}; |
Duncan P. N. Exon Smith | 38a7f11 | 2015-07-31 18:59:37 +0000 | [diff] [blame] | 61 | // CHECK: = !DILocalVariable(name: "__range" |
Duncan P. N. Exon Smith | f04be1f | 2015-03-03 17:25:55 +0000 | [diff] [blame] | 62 | // CHECK-SAME: scope: [[RANGE_FOR:![0-9]*]] |
| 63 | // CHECK-NOT: line: |
| 64 | // CHECK-SAME: ){{$}} |
Duncan P. N. Exon Smith | 9dd4e4e | 2015-04-29 16:40:08 +0000 | [diff] [blame] | 65 | // CHECK: [[RANGE_FOR]] = distinct !DILexicalBlock({{.*}}, line: [[@LINE+1]]) |
David Blaikie | ac0a5c4 | 2014-08-22 21:54:29 +0000 | [diff] [blame] | 66 | for (int i : x) { |
Duncan P. N. Exon Smith | 38a7f11 | 2015-07-31 18:59:37 +0000 | [diff] [blame] | 67 | // CHECK: = !DILocalVariable(name: "i" |
Duncan P. N. Exon Smith | f04be1f | 2015-03-03 17:25:55 +0000 | [diff] [blame] | 68 | // CHECK-SAME: scope: [[RANGE_FOR_BODY:![0-9]*]] |
| 69 | // CHECK-SAME: line: [[@LINE-3]] |
Duncan P. N. Exon Smith | 9dd4e4e | 2015-04-29 16:40:08 +0000 | [diff] [blame] | 70 | // CHECK: [[RANGE_FOR_BODY]] = distinct !DILexicalBlock(scope: [[RANGE_FOR]],{{.*}} line: [[@LINE-4]]) |
David Blaikie | ac0a5c4 | 2014-08-22 21:54:29 +0000 | [diff] [blame] | 71 | } |
Adrian Prantl | 0ffce6e | 2013-06-08 00:16:55 +0000 | [diff] [blame] | 72 | } |