Skip to content

Commit

Permalink
Merge pull request lcompilers#2144 from certik/err
Browse files Browse the repository at this point in the history
Give a C interoperability error for module structs also
  • Loading branch information
certik committed Jul 10, 2023
2 parents 2ae4640 + ade9e79 commit b39a2cb
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 17 deletions.
2 changes: 1 addition & 1 deletion src/lpython/semantics/python_ast_to_asr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2735,7 +2735,7 @@ class CommonVisitor : public AST::BaseVisitor<Struct> {
throw SemanticAbort();
}
if (ASR::is_a<ASR::Struct_t>(*asr_alloc_type)) {
ASR::symbol_t *sym = ASR::down_cast<ASR::Struct_t>(asr_alloc_type)->m_derived_type;
ASR::symbol_t *sym = ASRUtils::symbol_get_past_external(ASR::down_cast<ASR::Struct_t>(asr_alloc_type)->m_derived_type);
if (ASR::is_a<ASR::StructType_t>(*sym)) {
ASR::StructType_t *st = ASR::down_cast<ASR::StructType_t>(sym);
if (st->m_abi != ASR::abiType::BindC) {
Expand Down
12 changes: 2 additions & 10 deletions tests/errors/bindc_10e.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from lpython import (i64, i16, CPtr, c_p_pointer, Pointer, sizeof, packed,
dataclass, ccallable, ccall, i32)
from lpython import i64, i16, CPtr, c_p_pointer, Pointer, sizeof, ccall, i32
from bindc_10e_mod import S

@ccall
def _lfortran_malloc(size: i32) -> CPtr:
Expand All @@ -9,14 +9,6 @@ def _lfortran_malloc(size: i32) -> CPtr:
def alloc(buf_size:i64) -> CPtr:
return _lfortran_malloc(i32(buf_size))


@packed
@dataclass
class S:
a: i16
b: i64


def main():
p1: CPtr = alloc(sizeof(S))
print(p1)
Expand Down
7 changes: 7 additions & 0 deletions tests/errors/bindc_10e_mod.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from lpython import packed, dataclass, i16, i64

@packed
@dataclass
class S:
a: i16
b: i64
4 changes: 2 additions & 2 deletions tests/reference/asr-bindc_10e-8b10394.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
"basename": "asr-bindc_10e-8b10394",
"cmd": "lpython --show-asr --no-color {infile} -o {outfile}",
"infile": "tests/errors/bindc_10e.py",
"infile_hash": "36d1b5d366716d6a601db544fe8ff32aba76518181e71a98a4e6500c",
"infile_hash": "fa023d4ad17e426f778a99326998e6dbeac5428fa252974a39a3219d",
"outfile": null,
"outfile_hash": null,
"stdout": null,
"stdout_hash": null,
"stderr": "asr-bindc_10e-8b10394.stderr",
"stderr_hash": "7686dd8c9b718548d301e28d39cd15a85b00030172c5658b38a75af5",
"stderr_hash": "9ea4ff2c8a8789057456196deb5772e4b3a2dffadbd10ecfe5f15f29",
"returncode": 2
}
10 changes: 6 additions & 4 deletions tests/reference/asr-bindc_10e-8b10394.stderr
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
semantic error: The struct in c_p_pointer must be C interoperable
--> tests/errors/bindc_10e.py:23:38
--> tests/errors/bindc_10e.py:15:38
|
23 | p2: Pointer[S] = c_p_pointer(p1, S)
15 | p2: Pointer[S] = c_p_pointer(p1, S)
| ^ not C interoperable

--> tests/errors/bindc_10e_mod.py:5:1 - 7:10
|
15 | class S:
5 | class S:
| ~~~~~~~~...
...
|
17 | b: i64
7 | b: i64
| ...~~~~~~~~~~ help: add the @ccallable decorator to this struct to make it C interoperable

0 comments on commit b39a2cb

Please sign in to comment.