// File: /workspace/github_c_makefile_star2_O0/ryvnf[P]czc/eval.c
// Function: eval_type
struct type *eval_type(struct type *t, struct ast *ast)
{
    struct type *type;
    switch (ast->tag) {
        case COMMA_EXPR:
            eval_type(NULL, ast_ast(ast, 0));
            type = eval_type(t, ast_ast(ast, 1));
            break;

        case COND_EXPR:
            type = eval_cond_type(t, ast);
            break;

        case ASGN_EXPR:
        case ADD_ASGN_EXPR:
        case SUB_ASGN_EXPR:
        case MUL_ASGN_EXPR:
        case DIV_ASGN_EXPR:
        case REM_ASGN_EXPR:
        case OR_ASGN_EXPR:
        case XOR_ASGN_EXPR:
        case AND_ASGN_EXPR:
        case SHL_ASGN_EXPR:
        case SHR_ASGN_EXPR:
            type = eval_asgn_type(ast);
            break;

        case LOR_EXPR:
        case LAND_EXPR:
            type = eval_binop_type(ast, BOOL_TYPE_FLAG);
            break;

        case EQ_EXPR:
        case NE_EXPR:
            type = eval_relop_type(ast, BOOL_TYPE_FLAG | INT_TYPE_FLAG | FLOAT_TYPE_FLAG |
                    PTR_TYPE_FLAG);
            break;

        case LT_EXPR:
        case GT_EXPR:
        case LE_EXPR:
        case GE_EXPR:
            type = eval_relop_type(ast, INT_TYPE_FLAG | FLOAT_TYPE_FLAG | PTR_TYPE_FLAG);
            break;

        case OR_EXPR:
        case XOR_EXPR:
        case AND_EXPR:
        case SHL_EXPR:
        case SHR_EXPR:
        case REM_EXPR:
            type = eval_binop_type(ast, INT_TYPE_FLAG);
            break;

        case ADD_EXPR:
            type = eval_add_type(ast);
            break;

        case SUB_EXPR:
            type = eval_sub_type(ast);
            break;

        case MUL_EXPR:
        case DIV_EXPR:
            type = eval_binop_type(ast, INT_TYPE_FLAG | FLOAT_TYPE_FLAG);
            break;

        case NOT_EXPR:
            type = eval_unop_type(ast, BOOL_TYPE_FLAG, false);
            break;

        case COMPL_EXPR:
            type = eval_unop_type(ast, INT_TYPE_FLAG, false);
            break;

        case UPLUS_EXPR:
        case NEG_EXPR:
            type = eval_unop_type(ast, INT_TYPE_FLAG | FLOAT_TYPE_FLAG, false);
            break;

        case REF_EXPR:
            type = eval_ref_type(ast);
            break;

        case PRE_INC_EXPR:
        case PRE_DEC_EXPR:
        case POST_INC_EXPR:
        case POST_DEC_EXPR:
            type = eval_unop_type(ast, INT_TYPE_FLAG | FLOAT_TYPE_FLAG | PTR_TYPE_FLAG, true);
            break;

        case SIZEOF_EXPR:
            type = eval_sizeof_type(ast);
            break;

        case CAST_EXPR:
            type = eval_cast_type(ast);
            break;

        case DEREF_EXPR:
            type = eval_deref_type(ast);
            break;

        case SUBSCR_EXPR:
            type = eval_subscr_type(ast);
            break;

        case CALL_EXPR:
            type = eval_call_type(ast);
            break;

        case MEMBER_EXPR:
            type = eval_member_type(ast);
            break;

        case INT_CONST:
            type = const_int_type;
            break;

        case FLOAT_CONST:
            type = const_float_type;
            break;

        case STR_LIT:
            type = eval_str_lit_type(ast);
            break;

        case TRUE_CONST:
            type = bool_type;
            break;

        case FALSE_CONST:
            type = bool_type;
            break;

        case NULL_CONST:
            type = void_ptr_type;
            break;

        case NAME:
            type = eval_name_type(t, ast);
            break;

        case DECL:
            type = eval_decl_type(ast);
            break;

        case INIT_EXPR:
            type = eval_init_type(t, ast);
            break;
    }

    if (type && type_type(type->tag) == SELFREF_TYPE_FLAG)
        fatal(ast->loc, "type cannot refer to itself in constant context");

    return type;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x1c(%rbp)
testl %eax, %eax
je 0x75c5
jmp 0x7153
movl -0x1c(%rbp), %eax
subl $0x1, %eax
je 0x75b8
jmp 0x7161
movl -0x1c(%rbp), %eax
subl $0x2, %eax
je 0x75ab
jmp 0x716f
movl -0x1c(%rbp), %eax
subl $0x1000, %eax           # imm = 0x1000
je 0x75d5
jmp 0x717f
movl -0x1c(%rbp), %eax
subl $0x2000, %eax           # imm = 0x2000
je 0x7582
jmp 0x718f
movl -0x1c(%rbp), %eax
subl $0x3000, %eax           # imm = 0x3000
je 0x758f
jmp 0x719f
movl -0x1c(%rbp), %eax
subl $0x4000, %eax           # imm = 0x4000
je 0x75e8
jmp 0x71af
movl -0x1c(%rbp), %eax
subl $0x4200, %eax           # imm = 0x4200
je 0x739a
jmp 0x71bf
movl -0x1c(%rbp), %eax
subl $0x4210, %eax           # imm = 0x4210
je 0x73de
jmp 0x71cf
movl -0x1c(%rbp), %eax
addl $0xffffbde0, %eax       # imm = 0xFFFFBDE0
subl $0xb, %eax
jb 0x73f4
jmp 0x71e2
movl -0x1c(%rbp), %eax
subl $0x4230, %eax           # imm = 0x4230
je 0x7406
jmp 0x71f2
movl -0x1c(%rbp), %eax
subl $0x4240, %eax           # imm = 0x4240
je 0x7406
jmp 0x7202
movl -0x1c(%rbp), %eax
addl $0xffffbdb0, %eax       # imm = 0xFFFFBDB0
subl $0x2, %eax
jb 0x741d
jmp 0x7215
movl -0x1c(%rbp), %eax
addl $0xffffbda0, %eax       # imm = 0xFFFFBDA0
subl $0x4, %eax
jb 0x7434
jmp 0x7228
movl -0x1c(%rbp), %eax
subl $0x4270, %eax           # imm = 0x4270
je 0x744b
jmp 0x7238
movl -0x1c(%rbp), %eax
subl $0x4280, %eax           # imm = 0x4280
je 0x744b
jmp 0x7248
movl -0x1c(%rbp), %eax
subl $0x4290, %eax           # imm = 0x4290
je 0x744b
jmp 0x7258
movl -0x1c(%rbp), %eax
addl $0xffffbd60, %eax       # imm = 0xFFFFBD60
subl $0x2, %eax
jb 0x744b
jmp 0x726b
movl -0x1c(%rbp), %eax
subl $0x42b0, %eax           # imm = 0x42B0
je 0x7462
jmp 0x727b
movl -0x1c(%rbp), %eax
subl $0x42b1, %eax           # imm = 0x42B1
je 0x7474
jmp 0x728b
movl -0x1c(%rbp), %eax
addl $0xffffbd40, %eax       # imm = 0xFFFFBD40
subl $0x2, %eax
jb 0x7486
jmp 0x729e
movl -0x1c(%rbp), %eax
subl $0x42c2, %eax           # imm = 0x42C2
je 0x744b
jmp 0x72ae
movl -0x1c(%rbp), %eax
subl $0x42d0, %eax           # imm = 0x42D0
je 0x749d
jmp 0x72be
movl -0x1c(%rbp), %eax
subl $0x42d1, %eax           # imm = 0x42D1
je 0x74b6
jmp 0x72ce
movl -0x1c(%rbp), %eax
addl $0xffffbd2e, %eax       # imm = 0xFFFFBD2E
subl $0x2, %eax
jb 0x74cf
jmp 0x72e1
movl -0x1c(%rbp), %eax
subl $0x42d4, %eax           # imm = 0x42D4
je 0x74e8
jmp 0x72f1
movl -0x1c(%rbp), %eax
addl $0xffffbd2b, %eax       # imm = 0xFFFFBD2B
subl $0x2, %eax
jb 0x74fa
jmp 0x7304
movl -0x1c(%rbp), %eax
subl $0x42d7, %eax           # imm = 0x42D7
je 0x7516
jmp 0x7314
movl -0x1c(%rbp), %eax
subl $0x42e0, %eax           # imm = 0x42E0
je 0x7528
jmp 0x7324
movl -0x1c(%rbp), %eax
subl $0x42f0, %eax           # imm = 0x42F0
je 0x753a
jmp 0x7334
movl -0x1c(%rbp), %eax
subl $0x42f1, %eax           # imm = 0x42F1
je 0x754c
jmp 0x7344
movl -0x1c(%rbp), %eax
subl $0x42f2, %eax           # imm = 0x42F2
je 0x755e
jmp 0x7354
movl -0x1c(%rbp), %eax
addl $0xffffbd0d, %eax       # imm = 0xFFFFBD0D
subl $0x2, %eax
jb 0x74fa
jmp 0x7367
movl -0x1c(%rbp), %eax
subl $0x42f5, %eax           # imm = 0x42F5
je 0x7570
jmp 0x7377
movl -0x1c(%rbp), %eax
subl $0x42f6, %eax           # imm = 0x42F6
je 0x75f7
jmp 0x7387
movl -0x1c(%rbp), %eax
subl $0x5000, %eax           # imm = 0x5000
je 0x759c
jmp 0x7608
movq -0x10(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x2a40
movq %rax, %rsi
xorl %eax, %eax
movl %eax, %edi
callq 0x7130
movq -0x8(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x10(%rbp), %rdi
movl $0x1, %esi
callq 0x2a40
movq -0x28(%rbp), %rdi
movq %rax, %rsi
callq 0x7130
movq %rax, -0x18(%rbp)
jmp 0x7608
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x7070
movq %rax, -0x18(%rbp)
jmp 0x7608
movq -0x10(%rbp), %rdi
callq 0x7a30
movq %rax, -0x18(%rbp)
jmp 0x7608
movq -0x10(%rbp), %rdi
movl $0x80, %esi
callq 0x7650
movq %rax, -0x18(%rbp)
jmp 0x7608
movq -0x10(%rbp), %rdi
movl $0x8e, %esi
callq 0x76e0
movq %rax, -0x18(%rbp)
jmp 0x7608
movq -0x10(%rbp), %rdi
movl $0xe, %esi
callq 0x76e0
movq %rax, -0x18(%rbp)
jmp 0x7608
movq -0x10(%rbp), %rdi
movl $0x2, %esi
callq 0x7650
movq %rax, -0x18(%rbp)
jmp 0x7608
movq -0x10(%rbp), %rdi
callq 0x77e0
movq %rax, -0x18(%rbp)
jmp 0x7608
movq -0x10(%rbp), %rdi
callq 0x78e0
movq %rax, -0x18(%rbp)
jmp 0x7608
movq -0x10(%rbp), %rdi
movl $0x6, %esi
callq 0x7650
movq %rax, -0x18(%rbp)
jmp 0x7608
movq -0x10(%rbp), %rdi
movl $0x80, %esi
xorl %edx, %edx
callq 0x7770
movq %rax, -0x18(%rbp)
jmp 0x7608
movq -0x10(%rbp), %rdi
movl $0x2, %esi
xorl %edx, %edx
callq 0x7770
movq %rax, -0x18(%rbp)
jmp 0x7608
movq -0x10(%rbp), %rdi
movl $0x6, %esi
xorl %edx, %edx
callq 0x7770
movq %rax, -0x18(%rbp)
jmp 0x7608
movq -0x10(%rbp), %rdi
callq 0x7b90
movq %rax, -0x18(%rbp)
jmp 0x7608
movq -0x10(%rbp), %rdi
movl $0xe, %esi
movl $0x1, %edx
callq 0x7770
movq %rax, -0x18(%rbp)
jmp 0x7608
movq -0x10(%rbp), %rdi
callq 0x7c40
movq %rax, -0x18(%rbp)
jmp 0x7608
movq -0x10(%rbp), %rdi
callq 0x7c90
movq %rax, -0x18(%rbp)
jmp 0x7608
movq -0x10(%rbp), %rdi
callq 0x7be0
movq %rax, -0x18(%rbp)
jmp 0x7608
movq -0x10(%rbp), %rdi
callq 0x7cf0
movq %rax, -0x18(%rbp)
jmp 0x7608
movq -0x10(%rbp), %rdi
callq 0x7de0
movq %rax, -0x18(%rbp)
jmp 0x7608
movq -0x10(%rbp), %rdi
callq 0x7f50
movq %rax, -0x18(%rbp)
jmp 0x7608
leaq 0x127bf(%rip), %rax     # 0x19d48
movq %rax, -0x18(%rbp)
jmp 0x7608
leaq 0x127b6(%rip), %rax     # 0x19d4c
movq %rax, -0x18(%rbp)
jmp 0x7608
movq -0x10(%rbp), %rdi
callq 0x8060
movq %rax, -0x18(%rbp)
jmp 0x7608
leaq 0x1279e(%rip), %rax     # 0x19d50
movq %rax, -0x18(%rbp)
jmp 0x7608
leaq 0x12791(%rip), %rax     # 0x19d50
movq %rax, -0x18(%rbp)
jmp 0x7608
leaq 0x127a4(%rip), %rax     # 0x19d70
movq (%rax), %rax
movq %rax, -0x18(%rbp)
jmp 0x7608
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x80a0
movq %rax, -0x18(%rbp)
jmp 0x7608
movq -0x10(%rbp), %rdi
callq 0x8230
movq %rax, -0x18(%rbp)
jmp 0x7608
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0x82d0
movq %rax, -0x18(%rbp)
cmpq $0x0, -0x18(%rbp)
je 0x7637
movq -0x18(%rbp), %rax
movl (%rax), %edi
callq 0x6f00
cmpl $0x100, %eax            # imm = 0x100
jne 0x7637
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
leaq 0xbc39(%rip), %rsi      # 0x13269
movb $0x0, %al
callq 0x6610
movq -0x18(%rbp), %rax
addq $0x30, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)