void foo() {
  int l;
bad1:
#pragma acc parallel
  goto bad1;
#pragma acc kernels
  goto bad1;
#pragma acc data
  goto bad1;
#pragma acc loop
  for (l = 0; l < 2; ++l)
    goto bad1;
  goto bad2_parallel;
#pragma acc parallel
  {
  bad2_parallel:;
  }
  goto bad2_kernels;
#pragma acc kernels
  {
  bad2_kernels:;
  }
  goto bad2_data;
#pragma acc data
  {
  bad2_data:;
  }
  goto bad2_loop;
#pragma acc loop
  for (l = 0; l < 2; ++l) {
  bad2_loop:;
  }
#pragma acc parallel
  {
    int i;
    goto ok1_parallel;
    for (i = 0; i < 10; ++i) {
    ok1_parallel:
      break;
    }
  }
#pragma acc kernels
  {
    int i;
    goto ok1_kernels;
    for (i = 0; i < 10; ++i) {
    ok1_kernels:
      break;
    }
  }
#pragma acc data
  {
    int i;
    goto ok1_data;
    for (i = 0; i < 10; ++i) {
    ok1_data:
      break;
    }
  }
#pragma acc loop
  for (l = 0; l < 2; ++l) {
    int i;
    goto ok1_loop;
    for (i = 0; i < 10; ++i) {
    ok1_loop:
      break;
    }
  }
}


x86 assembly (clang, -O0):
<foo>:
push   %rbp
mov    %rsp,%rbp
jmp    1104 <foo+0x4>

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

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

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