1570af302Sopenharmony_ci// gcc 4.9.0 introduced an invalid optimization for local weak alias symbols
2570af302Sopenharmony_ci// which drops stdout fflush from exit in musl
3570af302Sopenharmony_ci// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61144
4570af302Sopenharmony_ci#include <errno.h>
5570af302Sopenharmony_ci#include <stdio.h>
6570af302Sopenharmony_ci#include <stdlib.h>
7570af302Sopenharmony_ci#include <string.h>
8570af302Sopenharmony_ci#include <unistd.h>
9570af302Sopenharmony_ci#include <sys/wait.h>
10570af302Sopenharmony_ci#include "test.h"
11570af302Sopenharmony_ci
12570af302Sopenharmony_ci#define ASSERT(c) do { \
13570af302Sopenharmony_ci	errno = 0; \
14570af302Sopenharmony_ci	if (!(c)) \
15570af302Sopenharmony_ci		t_error("%s failed (errno: %s)\n", #c, strerror(errno)); \
16570af302Sopenharmony_ci} while(0)
17570af302Sopenharmony_ci
18570af302Sopenharmony_ciint main(void)
19570af302Sopenharmony_ci{
20570af302Sopenharmony_ci	char tmp[] = "/data/local/tmp/testsuite-XXXXXX";
21570af302Sopenharmony_ci	int fd, pid, status;
22570af302Sopenharmony_ci	char c;
23570af302Sopenharmony_ci
24570af302Sopenharmony_ci	ASSERT((fd = mkstemp(tmp)) > 2);
25570af302Sopenharmony_ci	ASSERT((pid = fork()) >= 0);
26570af302Sopenharmony_ci	if (pid == 0) {
27570af302Sopenharmony_ci		ASSERT(close(1) == 0);
28570af302Sopenharmony_ci		ASSERT(dup(fd) == 1);
29570af302Sopenharmony_ci		ASSERT(fwrite("x", 1, 1, stdout) == 1);
30570af302Sopenharmony_ci		exit(t_status);
31570af302Sopenharmony_ci	}
32570af302Sopenharmony_ci	ASSERT(waitpid(pid, &status, 0) == pid);
33570af302Sopenharmony_ci	ASSERT(WIFEXITED(status) && WEXITSTATUS(status) == 0);
34570af302Sopenharmony_ci	ASSERT(pread(fd, &c, 1, 0) == 1);
35570af302Sopenharmony_ci	ASSERT(c == 'x');
36570af302Sopenharmony_ci	ASSERT(unlink(tmp) == 0);
37570af302Sopenharmony_ci	return t_status;
38570af302Sopenharmony_ci}
39