aboutsummaryrefslogtreecommitdiff
path: root/src/ir.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2019-02-12 00:51:06 -0500
committerAndrew Kelley <andrew@ziglang.org>2019-02-12 00:51:06 -0500
commit285e2f62ba0648d6d8e7ff64d1ee7d2900481e2f (patch)
treeca99c7ae5e4e29bb12a750b92a8d292b3e09a556 /src/ir.cpp
parent0abe6d668eb52aefa59c75a8d8f782f2372f8600 (diff)
downloadzig-285e2f62ba0648d6d8e7ff64d1ee7d2900481e2f.tar.gz
zig-285e2f62ba0648d6d8e7ff64d1ee7d2900481e2f.zip
disallow C pointers to non-C-ABI-compatible element types
See #1059
Diffstat (limited to 'src/ir.cpp')
-rw-r--r--src/ir.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/ir.cpp b/src/ir.cpp
index 1f0edc910d..64e08ef7ea 100644
--- a/src/ir.cpp
+++ b/src/ir.cpp
@@ -21145,6 +21145,10 @@ static IrInstruction *ir_analyze_instruction_ptr_type(IrAnalyze *ira, IrInstruct
} else if (child_type->id == ZigTypeIdOpaque && instruction->ptr_len == PtrLenUnknown) {
ir_add_error(ira, &instruction->base, buf_sprintf("unknown-length pointer to opaque"));
return ira->codegen->invalid_instruction;
+ } else if (instruction->ptr_len == PtrLenC && !type_allowed_in_extern(ira->codegen, child_type)) {
+ ir_add_error(ira, &instruction->base,
+ buf_sprintf("C pointers cannot point to non-C-ABI-compatible type '%s'", buf_ptr(&child_type->name)));
+ return ira->codegen->invalid_instruction;
}
uint32_t align_bytes;