blob: 55d55973204da25110946f4524ab3259680dff64 [file] [log] [blame]
// { dg-options "-Wsequence-point -fdiagnostics-show-caret" }
// { dg-require-effective-target alloca }
void *libiberty_concat_ptr;
extern unsigned long concat_length (const char *, ...);
extern char *concat_copy2 (const char *, ...);
#define ACONCAT(ACONCAT_PARAMS) \
(libiberty_concat_ptr = (char *) ALLOCA (concat_length ACONCAT_PARAMS + 1), /* { dg-warning "may be undefined" } */ \
concat_copy2 ACONCAT_PARAMS)
/* Arbitrary content here.
In PR c++/70105, this was >500 lines of source.
This should not be printed. */
# define ALLOCA(x) __builtin_alloca(x)
int strlen (const char *);
void *get_identifier (const char *);
void *get_identifier_with_length (const char *, int);
#define GET_IDENTIFIER(STR) \
(__builtin_constant_p (STR) \
? get_identifier_with_length ((STR), strlen (STR)) \
: get_identifier (STR))
void *test(void)
{
int *i;
return GET_IDENTIFIER (ACONCAT (("foo")));
}
/* { dg-begin-multiline-output "" }
(libiberty_concat_ptr = (char *) ALLOCA (concat_length ACONCAT_PARAMS + 1),
^
{ dg-end-multiline-output "" } */
/* { dg-begin-multiline-output "" }
? get_identifier_with_length ((STR), strlen (STR)) \
^~~
{ dg-end-multiline-output "" } */
/* { dg-begin-multiline-output "" }
return GET_IDENTIFIER (ACONCAT (("foo")));
^~~~~~~
{ dg-end-multiline-output "" } */