28 lines
641 B
C
28 lines
641 B
C
|
/* As bconstp-1.c, but with the __builtin_constant_p calls inside
|
||
|
__builtin_choose_expr. */
|
||
|
/* { dg-do compile } */
|
||
|
|
||
|
/* This test checks that builtin_constant_p can be used safely in
|
||
|
initializers for static data. The macro X() defined below should
|
||
|
be an acceptable initializer expression no matter how complex its
|
||
|
argument is. */
|
||
|
|
||
|
extern int a;
|
||
|
extern int b;
|
||
|
|
||
|
extern int foo(void);
|
||
|
extern int bar(void);
|
||
|
|
||
|
#define X(exp) (__builtin_choose_expr(1, __builtin_constant_p(exp), 1) ? (exp) : -1)
|
||
|
|
||
|
const short tests[] = {
|
||
|
X(0),
|
||
|
X(a),
|
||
|
X(0 && a),
|
||
|
X(a && b),
|
||
|
X(foo()),
|
||
|
X(0 && foo()),
|
||
|
X(a && foo()),
|
||
|
X(foo() && bar())
|
||
|
};
|