// RUN: %clang_cc1 %s -triple i386-pc-linux-gnu -verify -fsyntax-only
// RUN: %clang_cc1 %s -triple x86_64-pc-linux-gnu -verify -fsyntax-only

struct S {
  ~S();
  int f(int);
private:
  int k;
};
void test1(int n) {
// expected-error@+1 {{cannot jump from this goto statement to its label}}
  goto DirectJump;
// expected-note@+1 {{jump bypasses variable with a non-trivial destructor}}
  S s1;

DirectJump:
// expected-error@+1 {{cannot jump from this asm goto statement to one of its possible targets}}
  asm goto("jmp %l0;" ::::Later);
// expected-note@+1 {{jump bypasses variable with a non-trivial destructor}}
  S s2;
// expected-note@+1 {{possible target of asm goto statement}}
Later:
  return;
}

struct T { ~T(); };
void test2(int a) {
  if (a) {
FOO:
// expected-note@+2 {{jump exits scope of variable with non-trivial destructor}}
// expected-note@+1 {{jump exits scope of variable with non-trivial destructor}}
    T t;
    void *p = &&BAR;
// expected-error@+1 {{cannot jump from this asm goto statement to one of its possible targets}}
    asm goto("jmp %l0;" ::::BAR);
// expected-error@+1 {{cannot jump from this indirect goto statement to one of its possible targets}}
    goto *p;
    p = &&FOO;
    goto *p;
    return;
  }
// expected-note@+2 {{possible target of asm goto statement}}
// expected-note@+1 {{possible target of indirect goto statement}}
BAR:
  return;
}

int test3(int n)
{
  // expected-error@+2 {{cannot jump from this asm goto statement to one of its possible targets}}
  // expected-error@+1 {{cannot jump from this asm goto statement to one of its possible targets}}
  asm volatile goto("testl %0, %0; jne %l1;" :: "r"(n)::label_true, loop);
  // expected-note@+2 {{jump bypasses initialization of variable length array}}
  // expected-note@+1 {{possible target of asm goto statement}}
  return ({int a[n];label_true: 2;});
  // expected-note@+1 {{jump bypasses initialization of variable length array}}
  int b[n];
// expected-note@+1 {{possible target of asm goto statement}}
loop:
  return 0;
}
