| ... | ... | @@ -928,6 +928,7 @@ static LLVMValueRef gen_prefix_op_expr(CodeGen *g, AstNode *node) { |
| 928 | 928 | assert(node->data.prefix_op_expr.primary_expr); |
| 929 | 929 | |
| 930 | 930 | AstNode *expr_node = node->data.prefix_op_expr.primary_expr; |
| 931 | TypeTableEntry *expr_type = get_expr_type(expr_node); |
| 931 | 932 | |
| 932 | 933 | switch (node->data.prefix_op_expr.prefix_op) { |
| 933 | 934 | case PrefixOpInvalid: |
| ... | ... | @@ -935,8 +936,15 @@ static LLVMValueRef gen_prefix_op_expr(CodeGen *g, AstNode *node) { |
| 935 | 936 | case PrefixOpNegation: |
| 936 | 937 | { |
| 937 | 938 | LLVMValueRef expr = gen_expr(g, expr_node); |
| 938 | | add_debug_source_node(g, node); |
| 939 | | return LLVMBuildNeg(g->builder, expr, ""); |
| 939 | if (expr_type->id == TypeTableEntryIdInt) { |
| 940 | add_debug_source_node(g, node); |
| 941 | return LLVMBuildNeg(g->builder, expr, ""); |
| 942 | } else if (expr_type->id == TypeTableEntryIdFloat) { |
| 943 | add_debug_source_node(g, node); |
| 944 | return LLVMBuildFNeg(g->builder, expr, ""); |
| 945 | } else { |
| 946 | zig_unreachable(); |
| 947 | } |
| 940 | 948 | } |
| 941 | 949 | case PrefixOpBoolNot: |
| 942 | 950 | { |
| ... | ... | @@ -961,8 +969,7 @@ static LLVMValueRef gen_prefix_op_expr(CodeGen *g, AstNode *node) { |
| 961 | 969 | case PrefixOpDereference: |
| 962 | 970 | { |
| 963 | 971 | LLVMValueRef expr = gen_expr(g, expr_node); |
| 964 | | TypeTableEntry *type_entry = get_expr_type(expr_node); |
| 965 | | if (type_entry->size_in_bits == 0) { |
| 972 | if (expr_type->size_in_bits == 0) { |
| 966 | 973 | return nullptr; |
| 967 | 974 | } else { |
| 968 | 975 | add_debug_source_node(g, node); |