void foo() {
  int i, j;
#pragma omp for
  for (i = 0; i < 10; ++i)
    break;
bad1:
#pragma omp for
  for (i = 0; i < 10; ++i)
    goto bad1;
  goto bad2;
#pragma omp for
  for (i = 0; i < 10; ++i) {
  bad2:;
  }
#pragma omp for
  for (i = 0; i < 10; ++i)
    for (j = 0; j < 10; ++j)
      if (i == j)
        break;
#pragma omp for
  for (i = 0; i < 10; ++i)
    continue;
}


x86 assembly (clang, -O0):
<foo>:
push   %rbp
mov    %rsp,%rbp
movl   $0x0,-0x4(%rbp)
cmpl   $0xa,-0x4(%rbp)
jge    111a <foo+0x1a>
jmp    111a <foo+0x1a>
jmp    111f <foo+0x1f>
movl   $0x0,-0x4(%rbp)
cmpl   $0xa,-0x4(%rbp)
jge    1135 <foo+0x35>
jmp    111f <foo+0x1f>
jmp    1149 <foo+0x49>
cmpl   $0xa,-0x4(%rbp)
jge    115c <foo+0x5c>
jmp    1149 <foo+0x49>
jmp    114e <foo+0x4e>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    113a <foo+0x3a>
movl   $0x0,-0x4(%rbp)
cmpl   $0xa,-0x4(%rbp)
jge    11b5 <foo+0xb5>
movl   $0x0,-0x8(%rbp)
cmpl   $0xa,-0x8(%rbp)
jge    11a2 <foo+0xa2>
mov    -0x4(%rbp),%eax
cmp    -0x8(%rbp),%eax
jne    118f <foo+0x8f>
jmp    11a2 <foo+0xa2>
jmp    1194 <foo+0x94>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1174 <foo+0x74>
jmp    11a7 <foo+0xa7>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    1163 <foo+0x63>
movl   $0x0,-0x4(%rbp)
cmpl   $0xa,-0x4(%rbp)
jge    11d9 <foo+0xd9>
jmp    11cb <foo+0xcb>
mov    -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    11bc <foo+0xbc>
pop    %rbp
ret

x86 assembly (clang, -O2):
<foo>:
jmp    1100 <foo>

LLVM IR (-O0):
define void @foo() {
%1 = alloca i32
%2 = alloca i32
store i32 0, i32* %1
br label %3
3: ; preds = %7, %0
%4 = load i32, i32* %1
%5 = icmp slt i32 %4, 10
br i1 %5, label %6, label %10
6: ; preds = %3
br label %10
7: ; No predecessors!
%8 = load i32, i32* %1
%9 = add nsw i32 %8, 1
store i32 %9, i32* %1
br label %3
10: ; preds = %6, %3
br label %11
11: ; preds = %15, %10
store i32 0, i32* %1
br label %12
12: ; preds = %16, %11
%13 = load i32, i32* %1
%14 = icmp slt i32 %13, 10
br i1 %14, label %15, label %19
15: ; preds = %12
br label %11
16: ; No predecessors!
%17 = load i32, i32* %1
%18 = add nsw i32 %17, 1
store i32 %18, i32* %1
br label %12
19: ; preds = %12
br label %25
20: ; No predecessors!
store i32 0, i32* %1
br label %21
21: ; preds = %26, %20
%22 = load i32, i32* %1
%23 = icmp slt i32 %22, 10
br i1 %23, label %24, label %29
24: ; preds = %21
br label %25
25: ; preds = %24, %19
br label %26
26: ; preds = %25
%27 = load i32, i32* %1
%28 = add nsw i32 %27, 1
store i32 %28, i32* %1
br label %21
29: ; preds = %21
store i32 0, i32* %1
br label %30
30: ; preds = %47, %29
%31 = load i32, i32* %1
%32 = icmp slt i32 %31, 10
br i1 %32, label %33, label %50
33: ; preds = %30
store i32 0, i32* %2
br label %34
34: ; preds = %43, %33
%35 = load i32, i32* %2
%36 = icmp slt i32 %35, 10
br i1 %36, label %37, label %46
37: ; preds = %34
%38 = load i32, i32* %1
%39 = load i32, i32* %2
%40 = icmp eq i32 %38, %39
br i1 %40, label %41, label %42
41: ; preds = %37
br label %46
42: ; preds = %37
br label %43
43: ; preds = %42
%44 = load i32, i32* %2
%45 = add nsw i32 %44, 1
store i32 %45, i32* %2
br label %34
46: ; preds = %41, %34
br label %47
47: ; preds = %46
%48 = load i32, i32* %1
%49 = add nsw i32 %48, 1
store i32 %49, i32* %1
br label %30
50: ; preds = %30
store i32 0, i32* %1
br label %51
51: ; preds = %55, %50
%52 = load i32, i32* %1
%53 = icmp slt i32 %52, 10
br i1 %53, label %54, label %58
54: ; preds = %51
br label %55
55: ; preds = %54
%56 = load i32, i32* %1
%57 = add nsw i32 %56, 1
store i32 %57, i32* %1
br label %51
58: ; preds = %51
ret void
}

LLVM IR (-O2):
define void @foo() {
br label %1
1: ; preds = %1, %0
br label %1
}