// RUN: %clang_cc1 -debug-info-kind=limited -std=c++11 -emit-llvm %s -o -| FileCheck %s
//
// Two variables with the same name in subsequent if staments need to be in separate scopes.
//
// rdar://problem/14024005

int src();

void f();

void func() {
  // CHECK: = !DILocalVariable(name: "i"
  // CHECK-SAME:               scope: [[IF1:![0-9]*]]
  // CHECK-SAME:               line: [[@LINE+2]]
  // CHECK: [[IF1]] = distinct !DILexicalBlock({{.*}}line: [[@LINE+1]])
  if (int i = src())
    f();

  // CHECK: = !DILocalVariable(name: "i"
  // CHECK-SAME:               scope: [[IF2:![0-9]*]]
  // CHECK-SAME:               line: [[@LINE+2]]
  // CHECK: [[IF2]] = distinct !DILexicalBlock({{.*}}line: [[@LINE+1]])
  if (int i = src()) {
    f();
  } else
    f();

  // CHECK: = !DILocalVariable(name: "i"
  // CHECK-SAME:               scope: [[FOR:![0-9]*]]
  // CHECK-SAME:               line: [[@LINE+2]]
  // CHECK: [[FOR]] = distinct !DILexicalBlock({{.*}}line: [[@LINE+1]])
  for (int i = 0;
  // CHECK: = !DILocalVariable(name: "b"
  // CHECK-SAME:               scope: [[FOR_BODY:![0-9]*]]
  // CHECK-SAME:               line: [[@LINE+6]]
  // CHECK: [[FOR_BODY]] = distinct !DILexicalBlock({{.*}}line: [[@LINE-4]])
  // The scope could be located at 'bool b', but LLVM drops line information for
  // scopes anyway, so it's not terribly important.
  // FIXME: change the debug info schema to not include locations of scopes,
  // since they're not used.
       bool b = i != 10; ++i)
    f();

  // CHECK: = !DILocalVariable(name: "i"
  // CHECK-SAME:               scope: [[FOR:![0-9]*]]
  // CHECK-SAME:               line: [[@LINE+2]]
  // CHECK: [[FOR]] = distinct !DILexicalBlock({{.*}}line: [[@LINE+1]])
  for (int i = 0; i != 10; ++i) {
    // FIXME: Do not include scopes that have only other scopes (and no variables
    // or using declarations) as direct children, they just waste
    // space/relocations/etc.
    // CHECK: [[FOR_LOOP_INCLUDING_COND:!.*]] = distinct !DILexicalBlock(scope: [[FOR]],{{.*}} line: [[@LINE-4]])
    // CHECK: = !DILocalVariable(name: "b"
    // CHECK-SAME:               scope: [[FOR_COMPOUND:![0-9]*]]
    // CHECK-SAME:               line: [[@LINE+2]]
    // CHECK: [[FOR_COMPOUND]] = distinct !DILexicalBlock(scope: [[FOR_LOOP_INCLUDING_COND]],{{.*}} line: [[@LINE-8]])
    bool b = i % 2;
  }

  int x[] = {1, 2};
  // CHECK: = !DILocalVariable(name: "__range"
  // CHECK-SAME:               scope: [[RANGE_FOR:![0-9]*]]
  // CHECK-NOT:                line:
  // CHECK-SAME:               ){{$}}
  // CHECK: [[RANGE_FOR]] = distinct !DILexicalBlock({{.*}}, line: [[@LINE+1]])
  for (int i : x) {
    // CHECK: = !DILocalVariable(name: "i"
    // CHECK-SAME:               scope: [[RANGE_FOR_BODY:![0-9]*]]
    // CHECK-SAME:               line: [[@LINE-3]]
    // CHECK: [[RANGE_FOR_BODY]] = distinct !DILexicalBlock(scope: [[RANGE_FOR]],{{.*}} line: [[@LINE-4]])
  }
}
