/* { dg-require-effective-target label_values } */

void abort(void);
void exit(int);

int try(int num) {
    __label__ lab1, lab2, lab3, lab4, lab5, lab6, default_lab;

    void *do_switch(int num) {
        switch (num) {
        case 1:
            return &&lab1;
        case 2:
            return &&lab2;
        case 3:
            return &&lab3;
        case 4:
            return &&lab4;
        case 5:
            return &&lab5;
        case 6:
            return &&lab6;
        default:
            return &&default_lab;
        }
    }

    goto *do_switch(num);

lab1:
    return 1;

lab2:
    return 2;

lab3:
    return 3;

lab4:
    return 4;

lab5:
    return 5;

lab6:
    return 6;

default_lab:
    return -1;
}

int main(void) {
    int i;
    for (i = 1; i <= 6; i++) {
        if (try(i) != i)
            abort();
    }
    exit(0);
}
/* { dg-require-effective-target nested } */
