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