// File: /workspace/github_c_makefile_star2_O0/lucvoo[P]sparse-dev/symbol.c
// Function: examine_symbol_type
struct symbol *examine_symbol_type(struct symbol * sym)
{
	if (!sym)
		return sym;

	/* Already done? */
	if (sym->examined)
		return sym;
	sym->examined = 1;

	switch (sym->type) {
	case SYM_FN:
	case SYM_NODE:
		return examine_node_type(sym);
	case SYM_ARRAY:
		return examine_array_type(sym);
	case SYM_STRUCT:
		return examine_struct_union_type(sym, 1);
	case SYM_UNION:
		return examine_struct_union_type(sym, 0);
	case SYM_PTR:
		return examine_pointer_type(sym);
	case SYM_ENUM:
		return examine_enum_type(sym);
	case SYM_BITFIELD:
		return examine_bitfield_type(sym);
	case SYM_BASETYPE:
		/* Size and alignment had better already be set up */
		return sym;
	case SYM_TYPEOF:
		return examine_typeof(sym);
	case SYM_PREPROCESSOR:
		sparse_error(sym->pos, "ctype on preprocessor command? (%s)", show_ident(sym->ident));
		return NULL;
	case SYM_UNINITIALIZED:
		sparse_error(sym->pos, "ctype on uninitialized symbol '%s'", show_typename(sym));
		return NULL;
	case SYM_RESTRICT:
		examine_base_type(sym);
		return sym;
	case SYM_FOULED:
		examine_base_type(sym);
		return sym;
	default:
		sparse_error(sym->pos, "Examining unknown symbol type %d", sym->type);
		break;
	}
	return sym;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x10(%rbp)
cmpq $0x0, -0x10(%rbp)
jne 0x3f670
movq -0x10(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x3f82c
movq -0x10(%rbp), %rax
movl 0x54(%rax), %eax
shrl $0xb, %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x3f68f
movq -0x10(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x3f82c
movq -0x10(%rbp), %rax
movl 0x54(%rax), %ecx
orl $0x800, %ecx            # imm = 0x800
movl %ecx, 0x54(%rax)
movq -0x10(%rbp), %rax
movzbl (%rax), %eax
movl %eax, %ecx
movq %rcx, -0x18(%rbp)
subl $0xe, %eax
ja 0x3f802
movq -0x18(%rbp), %rax
leaq 0x29cb8(%rip), %rcx     # 0x69378
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x10(%rbp), %rdi
callq 0x3f840
movq %rax, -0x8(%rbp)
jmp 0x3f82c
movq -0x10(%rbp), %rdi
callq 0x3f970
movq %rax, -0x8(%rbp)
jmp 0x3f82c
movq -0x10(%rbp), %rdi
movl $0x1, %esi
callq 0x3fa90
movq %rax, -0x8(%rbp)
jmp 0x3f82c
movq -0x10(%rbp), %rdi
xorl %esi, %esi
callq 0x3fa90
movq %rax, -0x8(%rbp)
jmp 0x3f82c
movq -0x10(%rbp), %rdi
callq 0x3fd90
movq %rax, -0x8(%rbp)
jmp 0x3f82c
movq -0x10(%rbp), %rdi
callq 0x3fde0
movq %rax, -0x8(%rbp)
jmp 0x3f82c
movq -0x10(%rbp), %rdi
callq 0x3fe80
movq %rax, -0x8(%rbp)
jmp 0x3f82c
movq -0x10(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x3f82c
movq -0x10(%rbp), %rdi
callq 0x3ffa0
movq %rax, -0x8(%rbp)
jmp 0x3f82c
movq -0x10(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x44150
movq %rax, %rdx
movq -0x20(%rbp), %rax
movq 0x4(%rax), %rdi
leaq 0x29c20(%rip), %rsi     # 0x693b4
movb $0x0, %al
callq 0x16f90
movq $0x0, -0x8(%rbp)
jmp 0x3f82c
movq -0x10(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x10(%rbp), %rdi
callq 0x33340
movq %rax, %rdx
movq -0x28(%rbp), %rax
movq 0x4(%rax), %rdi
leaq 0x29c0d(%rip), %rsi     # 0x693d8
movb $0x0, %al
callq 0x16f90
movq $0x0, -0x8(%rbp)
jmp 0x3f82c
movq -0x10(%rbp), %rdi
callq 0x40070
movq -0x10(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x3f82c
movq -0x10(%rbp), %rdi
callq 0x40070
movq -0x10(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x3f82c
movq -0x10(%rbp), %rax
movq -0x10(%rbp), %rcx
movl (%rcx), %edx
andl $0xff, %edx
movq 0x4(%rax), %rdi
leaq 0x29bde(%rip), %rsi     # 0x693fb
movb $0x0, %al
callq 0x16f90
movq -0x10(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x30, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)