// File: /workspace/github_c_makefile_star2_O0/lucvoo[P]sparse-dev/evaluate.c
// Function: create_pointer
static struct symbol *create_pointer(struct expression *expr, struct symbol *sym, int degenerate)
{
	struct symbol *node = alloc_symbol(expr->pos, SYM_NODE);
	struct symbol *ptr = alloc_symbol(expr->pos, SYM_PTR);

	node->ctype.base_type = ptr;
	ptr->bit_size = bits_in_pointer;
	ptr->ctype.alignment = pointer_alignment;

	node->bit_size = bits_in_pointer;
	node->ctype.alignment = pointer_alignment;

	access_symbol(sym);
	if (sym->ctype.modifiers & MOD_REGISTER) {
		warning(expr->pos, "taking address of 'register' variable '%s'", show_ident(sym->ident));
		sym->ctype.modifiers &= ~MOD_REGISTER;
	}
	if (sym->type == SYM_NODE) {
		combine_address_space(sym->pos, &ptr->ctype.as, sym->ctype.as);
		ptr->ctype.modifiers |= sym->ctype.modifiers & MOD_PTRINHERIT;
		sym = sym->ctype.base_type;
	}
	if (degenerate && sym->type == SYM_ARRAY) {
		combine_address_space(sym->pos, &ptr->ctype.as, sym->ctype.as);
		ptr->ctype.modifiers |= sym->ctype.modifiers & MOD_PTRINHERIT;
		sym = sym->ctype.base_type;
	}
	ptr->ctype.base_type = sym;

	return node;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl %edx, -0x14(%rbp)
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rdi
movl $0x3, %esi
callq 0x3f4d0
movq %rax, -0x20(%rbp)
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rdi
movl $0x4, %esi
callq 0x3f4d0
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x60(%rax)
leaq 0x3928a(%rip), %rax     # 0x8a6fc
movl (%rax), %ecx
movq -0x28(%rbp), %rax
movl %ecx, 0x50(%rax)
leaq 0x3927e(%rip), %rax     # 0x8a700
movslq (%rax), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x70(%rax)
leaq 0x39268(%rip), %rax     # 0x8a6fc
movl (%rax), %ecx
movq -0x20(%rbp), %rax
movl %ecx, 0x50(%rax)
leaq 0x3925c(%rip), %rax     # 0x8a700
movslq (%rax), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x70(%rax)
movq -0x10(%rbp), %rdi
callq 0x3f3f0
movq -0x10(%rbp), %rax
movq 0x68(%rax), %rax
andq $0x2, %rax
cmpq $0x0, %rax
je 0x51508
movq -0x8(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x44150
movq %rax, %rdx
movq -0x30(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0x1a72a(%rip), %rsi     # 0x6bc1b
movb $0x0, %al
callq 0x16d80
movq -0x10(%rbp), %rax
movq 0x68(%rax), %rcx
andq $-0x3, %rcx
movq %rcx, 0x68(%rax)
movq -0x10(%rbp), %rax
movl (%rax), %eax
andl $0xff, %eax
cmpl $0x3, %eax
jne 0x51567
movq -0x10(%rbp), %rax
movq -0x28(%rbp), %rsi
addq $0x48, %rsi
addq $0x18, %rsi
addq $0x20, %rsi
movq -0x10(%rbp), %rcx
movq 0x80(%rcx), %rdx
movq 0x4(%rax), %rdi
callq 0x4b5e0
movq -0x10(%rbp), %rax
movq 0x68(%rax), %rcx
andq $0x1c001e00, %rcx       # imm = 0x1C001E00
movq -0x28(%rbp), %rax
orq 0x68(%rax), %rcx
movq %rcx, 0x68(%rax)
movq -0x10(%rbp), %rax
movq 0x60(%rax), %rax
movq %rax, -0x10(%rbp)
cmpl $0x0, -0x14(%rbp)
je 0x515cc
movq -0x10(%rbp), %rax
movl (%rax), %eax
andl $0xff, %eax
cmpl $0x6, %eax
jne 0x515cc
movq -0x10(%rbp), %rax
movq -0x28(%rbp), %rsi
addq $0x48, %rsi
addq $0x18, %rsi
addq $0x20, %rsi
movq -0x10(%rbp), %rcx
movq 0x80(%rcx), %rdx
movq 0x4(%rax), %rdi
callq 0x4b5e0
movq -0x10(%rbp), %rax
movq 0x68(%rax), %rcx
andq $0x1c001e00, %rcx       # imm = 0x1C001E00
movq -0x28(%rbp), %rax
orq 0x68(%rax), %rcx
movq %rcx, 0x68(%rax)
movq -0x10(%rbp), %rax
movq 0x60(%rax), %rax
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x60(%rax)
movq -0x20(%rbp), %rax
addq $0x30, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)