/* { dg-do run } */ /* { dg-skip-if "profile-info-section" { powerpc-ibm-aix* } } */ /* { dg-options "-fprofile-arcs -fprofile-info-section" } */ #define assert(expr) \ ((expr) \ ? (void)0 \ : (__builtin_printf ("%s:%i: Assertion `%s' failed.\n", \ __FILE__, __LINE__, #expr), \ __builtin_abort ())) struct gcov_info; extern void __gcov_info_to_gcda (const struct gcov_info *__info, void (*__filename_fn) (const char *, void *), void (*__dump_fn) (const void *, unsigned, void *), void *(*__allocate_fn) (unsigned, void *), void *__arg); extern const struct gcov_info *my_info; static unsigned counter; static void filename (const char *f, void *arg) { assert (arg == &counter); assert (__builtin_strstr (f, "gcov-info-to-gcda.c") == 0); } static void dump (const void *d, unsigned n, void *arg) { unsigned *m = (unsigned *)arg; assert (arg == &counter); if (*m == 0) { const unsigned *u = d; assert (*u == 0x67636461); } *m += n; } static void * allocate (unsigned length, void *arg) { assert (arg == &counter); return __builtin_malloc (length); } int main() { __asm__ volatile (".set my_info, .LPBX2"); __gcov_info_to_gcda (my_info, filename, dump, allocate, &counter); assert (counter > 4); return 0; }