Blame src/regression/fflush-exit.c
|
Szabolcs Nagy |
61a99a |
// gcc 4.9.0 introduced an invalid optimization for local weak alias symbols
|
|
Szabolcs Nagy |
61a99a |
// which drops stdout fflush from exit in musl
|
|
Szabolcs Nagy |
61a99a |
// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61144
|
|
Szabolcs Nagy |
61a99a |
#include <errno.h>
|
|
Szabolcs Nagy |
61a99a |
#include <stdio.h>
|
|
Szabolcs Nagy |
61a99a |
#include <stdlib.h>
|
|
Szabolcs Nagy |
61a99a |
#include <string.h>
|
|
Szabolcs Nagy |
61a99a |
#include <unistd.h>
|
|
Szabolcs Nagy |
61a99a |
#include <sys/wait.h>
|
|
Szabolcs Nagy |
61a99a |
#include "test.h"
|
|
Szabolcs Nagy |
61a99a |
|
|
Szabolcs Nagy |
61a99a |
#define ASSERT(c) do { \
|
|
Szabolcs Nagy |
61a99a |
errno = 0; \
|
|
Szabolcs Nagy |
61a99a |
if (!(c)) \
|
|
Szabolcs Nagy |
61a99a |
t_error("%s failed (errno: %s)\n", #c, strerror(errno)); \
|
|
Szabolcs Nagy |
61a99a |
} while(0)
|
|
Szabolcs Nagy |
61a99a |
|
|
Szabolcs Nagy |
61a99a |
int main(void)
|
|
Szabolcs Nagy |
61a99a |
{
|
|
Szabolcs Nagy |
61a99a |
char tmp[] = "/tmp/testsuite-XXXXXX";
|
|
Szabolcs Nagy |
61a99a |
int fd, pid, status;
|
|
Szabolcs Nagy |
61a99a |
char c;
|
|
Szabolcs Nagy |
61a99a |
|
|
Szabolcs Nagy |
61a99a |
ASSERT((fd = mkstemp(tmp)) > 2);
|
|
Szabolcs Nagy |
61a99a |
ASSERT((pid = fork()) >= 0);
|
|
Szabolcs Nagy |
61a99a |
if (pid == 0) {
|
|
Szabolcs Nagy |
61a99a |
ASSERT(close(1) == 0);
|
|
Szabolcs Nagy |
61a99a |
ASSERT(dup(fd) == 1);
|
|
Szabolcs Nagy |
61a99a |
ASSERT(fwrite("x", 1, 1, stdout) == 1);
|
|
Szabolcs Nagy |
61a99a |
exit(t_status);
|
|
Szabolcs Nagy |
61a99a |
}
|
|
Szabolcs Nagy |
61a99a |
ASSERT(waitpid(pid, &status, 0) == pid);
|
|
Szabolcs Nagy |
61a99a |
ASSERT(WIFEXITED(status) && WEXITSTATUS(status) == 0);
|
|
Szabolcs Nagy |
61a99a |
ASSERT(pread(fd, &c, 1, 0) == 1);
|
|
Szabolcs Nagy |
61a99a |
ASSERT(c == 'x');
|
|
Szabolcs Nagy |
61a99a |
ASSERT(unlink(tmp) == 0);
|
|
Szabolcs Nagy |
61a99a |
return t_status;
|
|
Szabolcs Nagy |
61a99a |
}
|