// File: /workspace/github_c_makefile_star2_O0/nimble-code[P]Uno/Src/uno_global.c
// Function: unused_fcts
static void
unused_fcts(void)
{	Fct *f, *g;
	Sym *c;
	int sawsome = 0;

	fcts_reset();
	dfs(find_fct("main"));	/* mark reachable fcts */

	for (f = fcts; f; f = f->nxt)
		if (f->rval & 4)	/* rval, 1: return value, 2: no return value, 4: cannot tell */
			wind_down(f);	/* propagate mark to all fcts called */

	for (f = fcts; f; f = f->nxt)
		if (!f->visited
		&&  !f->special
		&&  !(f->rval & 4)
		&&  strcmp(f->fnm, "_global_") != 0
		&&  strstr(f->n->fnm, "stdio.h") == NULL)
		{	if (!sawsome)
				printf("uno:global: functions declared but not used:");
			if ((sawsome++) % 2 == 0)
				printf("\n");
			printf("\t%s:%d %s()",
				f->n->fnm, f->n->line, f->fnm);
		}
	if (sawsome) printf("\n");

	for (f = fcts; f; f = f->nxt)
	{	if (strcmp(f->fnm, "_global_") == 0)
			continue;

		if (strcmp(f->fnm, "main") == 0
		&&  (f->rval & 2))
			printf("uno:global: %s:%d %s() can fail to return a value\n",
				f->n->fnm, f->n->line, f->fnm);


		if ((f->rval & 1) && (f->rval & 2) && !f->special)
			printf("uno:global: %s:%d %s() can fail to return a value\n",
				f->n->fnm, f->n->line, f->fnm);
		else if (f->rval == 0)
			printf("uno:global: %s:%d %s() no return value status recorded\n",
				f->n->fnm, f->n->line, f->fnm);
	}

	for (f = fcts; f; f = f->nxt)
	for (c = f->calls; c; c = c->nxt)
	{	g = find_fct(c->s);

		if (c->n->line == 0
		&&  strcmp(c->n->fnm, "---") == 0)
			continue;

		if (g
		&& (g->rval & 2)
		&& (c->bits & USE)
		&& !(c->bits & HIDE))
		printf("uno:global: %s() fails to return value%s expected at %s:%d\n",
			c->s, (c->bits&DEF)?" maybe":"", c->n->fnm, c->n->line);
	}

	if (!verbose) return;

	for (f = fcts; f; f = f->nxt)
	for (c = f->calls; c; c = c->nxt)
	{	g = find_fct(c->s);
		if (g
		&& (g->rval & 1)
		&&  c->bits == DEF)
		printf("uno:global: return value of %s() ignored at %s:%d\n",
			c->s, c->n->fnm, c->n->line);
	}
	for (f = fcts; f; f = f->nxt)
	for (c = f->calls; c; c = c->nxt)
	{	g = find_fct(c->s);
		if (g
		&& (g->rval & 1)
		&&  c->bits == (USE|DEF))
		printf("uno:global: return value of %s() maybe ignored at %s:%d\n",
			c->s, c->n->fnm, c->n->line);
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movl $0x0, -0x1c(%rbp)
callq 0x1b60
leaq 0x5652(%rip), %rdi      # 0x739d
callq 0x13b0
movq %rax, %rdi
callq 0x3240
movq 0x9629(%rip), %rax      # 0xb388
movq %rax, -0x8(%rbp)
cmpq $0x0, -0x8(%rbp)
je 0x1d93
movq -0x8(%rbp), %rax
movswl 0x12(%rax), %eax
andl $0x4, %eax
cmpl $0x0, %eax
je 0x1d83
movq -0x8(%rbp), %rdi
callq 0x32b0
jmp 0x1d85
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rax
movq %rax, -0x8(%rbp)
jmp 0x1d63
movq 0x95ee(%rip), %rax      # 0xb388
movq %rax, -0x8(%rbp)
cmpq $0x0, -0x8(%rbp)
je 0x1e8c
movq -0x8(%rbp), %rax
cmpw $0x0, 0x38(%rax)
jne 0x1e79
movq -0x8(%rbp), %rax
cmpw $0x0, 0x14(%rax)
jne 0x1e79
movq -0x8(%rbp), %rax
movswl 0x12(%rax), %eax
andl $0x4, %eax
cmpl $0x0, %eax
jne 0x1e79
movq -0x8(%rbp), %rax
movq (%rax), %rdi
leaq 0x5532(%rip), %rsi      # 0x731b
callq 0x10c0
cmpl $0x0, %eax
je 0x1e79
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq (%rax), %rdi
leaq 0x57df(%rip), %rsi      # 0x75e8
callq 0x1150
cmpq $0x0, %rax
jne 0x1e79
cmpl $0x0, -0x1c(%rbp)
jne 0x1e28
leaq 0x57cf(%rip), %rdi      # 0x75f0
movb $0x0, %al
callq 0x1080
movl -0x1c(%rbp), %eax
movl %eax, %ecx
addl $0x1, %ecx
movl %ecx, -0x1c(%rbp)
movl $0x2, %ecx
cltd
idivl %ecx
cmpl $0x0, %edx
jne 0x1e4e
leaq 0x61cc(%rip), %rdi      # 0x8013
movb $0x0, %al
callq 0x1080
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq (%rax), %rsi
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movl 0x8(%rax), %edx
movq -0x8(%rbp), %rax
movq (%rax), %rcx
leaq 0x57ab(%rip), %rdi      # 0x761d
movb $0x0, %al
callq 0x1080
jmp 0x1e7b
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rax
movq %rax, -0x8(%rbp)
jmp 0x1d9e
cmpl $0x0, -0x1c(%rbp)
je 0x1ea0
leaq 0x617a(%rip), %rdi      # 0x8013
movb $0x0, %al
callq 0x1080
movq 0x94e1(%rip), %rax      # 0xb388
movq %rax, -0x8(%rbp)
cmpq $0x0, -0x8(%rbp)
je 0x1fcb
movq -0x8(%rbp), %rax
movq (%rax), %rdi
leaq 0x5457(%rip), %rsi      # 0x731b
callq 0x10c0
cmpl $0x0, %eax
jne 0x1ed3
jmp 0x1fba
movq -0x8(%rbp), %rax
movq (%rax), %rdi
leaq 0x54bc(%rip), %rsi      # 0x739d
callq 0x10c0
cmpl $0x0, %eax
jne 0x1f26
movq -0x8(%rbp), %rax
movswl 0x12(%rax), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0x1f26
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq (%rax), %rsi
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movl 0x8(%rax), %edx
movq -0x8(%rbp), %rax
movq (%rax), %rcx
leaq 0x570a(%rip), %rdi      # 0x7629
movb $0x0, %al
callq 0x1080
movq -0x8(%rbp), %rax
movswl 0x12(%rax), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x1f7e
movq -0x8(%rbp), %rax
movswl 0x12(%rax), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0x1f7e
movq -0x8(%rbp), %rax
cmpw $0x0, 0x14(%rax)
jne 0x1f7e
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq (%rax), %rsi
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movl 0x8(%rax), %edx
movq -0x8(%rbp), %rax
movq (%rax), %rcx
leaq 0x56b4(%rip), %rdi      # 0x7629
movb $0x0, %al
callq 0x1080
jmp 0x1fb8
movq -0x8(%rbp), %rax
movswl 0x12(%rax), %eax
cmpl $0x0, %eax
jne 0x1fb6
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movq (%rax), %rsi
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
movl 0x8(%rax), %edx
movq -0x8(%rbp), %rax
movq (%rax), %rcx
leaq 0x56ad(%rip), %rdi      # 0x765c
movb $0x0, %al
callq 0x1080
jmp 0x1fb8
jmp 0x1fba
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rax
movq %rax, -0x8(%rbp)
jmp 0x1eab
movq 0x93b6(%rip), %rax      # 0xb388
movq %rax, -0x8(%rbp)
cmpq $0x0, -0x8(%rbp)
je 0x20df
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rax
movq %rax, -0x18(%rbp)
cmpq $0x0, -0x18(%rbp)
je 0x20cc
movq -0x18(%rbp), %rax
movq (%rax), %rdi
callq 0x13b0
movq %rax, -0x10(%rbp)
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
cmpl $0x0, 0x8(%rax)
jne 0x2037
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq (%rax), %rdi
leaq 0x559b(%rip), %rsi      # 0x75c3
callq 0x10c0
cmpl $0x0, %eax
jne 0x2037
jmp 0x20bb
cmpq $0x0, -0x10(%rbp)
je 0x20b9
movq -0x10(%rbp), %rax
movswl 0x12(%rax), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0x20b9
movq -0x18(%rbp), %rax
movl 0x10(%rax), %eax
andl $0x4, %eax
cmpl $0x0, %eax
je 0x20b9
movq -0x18(%rbp), %rax
movl 0x10(%rax), %eax
andl $0x200, %eax            # imm = 0x200
cmpl $0x0, %eax
jne 0x20b9
movq -0x18(%rbp), %rax
movq (%rax), %rsi
movq -0x18(%rbp), %rax
movl 0x10(%rax), %ecx
andl $0x1, %ecx
leaq 0x5f8e(%rip), %rdx      # 0x8014
leaq 0x5643(%rip), %rax      # 0x76d0
cmpl $0x0, %ecx
cmovneq %rax, %rdx
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq (%rax), %rcx
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movl 0x8(%rax), %r8d
leaq 0x55e2(%rip), %rdi      # 0x7694
movb $0x0, %al
callq 0x1080
jmp 0x20bb
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x18(%rbp)
jmp 0x1fed
jmp 0x20ce
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rax
movq %rax, -0x8(%rbp)
jmp 0x1fd6
cmpl $0x0, 0x917a(%rip)      # 0xb260
jne 0x20ed
jmp 0x223d
movq 0x9294(%rip), %rax      # 0xb388
movq %rax, -0x8(%rbp)
cmpq $0x0, -0x8(%rbp)
je 0x2195
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rax
movq %rax, -0x18(%rbp)
cmpq $0x0, -0x18(%rbp)
je 0x2182
movq -0x18(%rbp), %rax
movq (%rax), %rdi
callq 0x13b0
movq %rax, -0x10(%rbp)
cmpq $0x0, -0x10(%rbp)
je 0x2172
movq -0x10(%rbp), %rax
movswl 0x12(%rax), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x2172
movq -0x18(%rbp), %rax
cmpl $0x1, 0x10(%rax)
jne 0x2172
movq -0x18(%rbp), %rax
movq (%rax), %rsi
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq (%rax), %rdx
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movl 0x8(%rax), %ecx
leaq 0x556c(%rip), %rdi      # 0x76d7
movb $0x0, %al
callq 0x1080
jmp 0x2174
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x18(%rbp)
jmp 0x210f
jmp 0x2184
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rax
movq %rax, -0x8(%rbp)
jmp 0x20f8
movq 0x91ec(%rip), %rax      # 0xb388
movq %rax, -0x8(%rbp)
cmpq $0x0, -0x8(%rbp)
je 0x223d
movq -0x8(%rbp), %rax
movq 0x30(%rax), %rax
movq %rax, -0x18(%rbp)
cmpq $0x0, -0x18(%rbp)
je 0x222a
movq -0x18(%rbp), %rax
movq (%rax), %rdi
callq 0x13b0
movq %rax, -0x10(%rbp)
cmpq $0x0, -0x10(%rbp)
je 0x221a
movq -0x10(%rbp), %rax
movswl 0x12(%rax), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x221a
movq -0x18(%rbp), %rax
cmpl $0x5, 0x10(%rax)
jne 0x221a
movq -0x18(%rbp), %rax
movq (%rax), %rsi
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq (%rax), %rdx
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movl 0x8(%rax), %ecx
leaq 0x54f7(%rip), %rdi      # 0x770a
movb $0x0, %al
callq 0x1080
jmp 0x221c
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x18(%rbp)
jmp 0x21b7
jmp 0x222c
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rax
movq %rax, -0x8(%rbp)
jmp 0x21a0
addq $0x20, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)