mirror of git://gcc.gnu.org/git/gcc.git
70 lines
1.9 KiB
C
70 lines
1.9 KiB
C
/* { dg-do compile } */
|
|
/* { dg-options "-fgnu-tm" } */
|
|
|
|
void ts(void) __attribute__((transaction_safe));
|
|
void tp(void) __attribute__((transaction_pure));
|
|
void tc(void) __attribute__((transaction_callable));
|
|
void ti(void) __attribute__((transaction_unsafe));
|
|
void tm(void) __attribute__((transaction_may_cancel_outer));
|
|
void tu(void);
|
|
int fc(int) __attribute__((const));
|
|
|
|
typedef void (*Fs) (void) __attribute__((transaction_safe));
|
|
typedef void (*Fc) (void) __attribute__((transaction_callable));
|
|
typedef void (*Fi) (void) __attribute__((transaction_unsafe));
|
|
typedef void (*Fm) (void) __attribute__((transaction_may_cancel_outer));
|
|
extern Fs ps;
|
|
extern Fc pc;
|
|
extern Fi pi;
|
|
extern Fm pm;
|
|
extern void (*pu)(void);
|
|
|
|
int __attribute__((transaction_safe))
|
|
foo(void)
|
|
{
|
|
int i;
|
|
|
|
ts();
|
|
tp();
|
|
tc(); /* { dg-error "unsafe function call" } */
|
|
ti(); /* { dg-error "unsafe function call" } */
|
|
|
|
/* ??? Direct function calls without markups are handled later
|
|
than pass_diagnose_tm_blocks, which means we'll exit with
|
|
errors before getting there. This test moved to safe-3.c. */
|
|
/* tu(); */
|
|
|
|
(*ps)();
|
|
(*pc)(); /* { dg-error "unsafe function call" } */
|
|
(*pi)(); /* { dg-error "unsafe function call" } */
|
|
(*pu)(); /* { dg-error "unsafe function call" } */
|
|
|
|
asm(""); /* { dg-error "asm not allowed" } */
|
|
asm("" : "=g"(i)); /* { dg-error "asm not allowed" } */
|
|
|
|
return fc(i);
|
|
}
|
|
|
|
int __attribute__((transaction_may_cancel_outer))
|
|
bar(void)
|
|
{
|
|
int i;
|
|
|
|
ts();
|
|
tp();
|
|
tc(); /* { dg-error "unsafe function call" } */
|
|
ti(); /* { dg-error "unsafe function call" } */
|
|
tm();
|
|
|
|
(*ps)();
|
|
(*pc)(); /* { dg-error "unsafe function call" } */
|
|
(*pi)(); /* { dg-error "unsafe function call" } */
|
|
(*pm)();
|
|
(*pu)(); /* { dg-error "unsafe function call" } */
|
|
|
|
asm(""); /* { dg-error "asm not allowed" } */
|
|
asm("" : "=g"(i)); /* { dg-error "asm not allowed" } */
|
|
|
|
return fc(i);
|
|
}
|