summaryrefslogtreecommitdiff
path: root/tests/errors/cfuncptr.pyx
blob: f07ef2167212f6120ecae07a7e0581044775101f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# mode: error

cdef int exceptmaybeminus2(int bad) except ?-2:
    if bad:
        raise RuntimeError
    else:
        return 0

def fail_exceptmaybeminus2(bad):
    cdef int (*fptr_a)(int) except -2
    cdef int (*fptr_b)(int) except -1
    cdef int (*fptr_c)(int) except ?-1
    fptr_a = exceptmaybeminus2
    fptr_b = exceptmaybeminus2
    fptr_c = exceptmaybeminus2

cdef extern from *:
    # define this as extern since Cython converts internal "except*" to "except -1"
    cdef int exceptstar(int bad) except *

def fail_exceptstar(bad):
    cdef int (*fptr_a)(int) noexcept
    cdef int (*fptr_b)(int) except -1
    cdef int (*fptr_c)(int) except ?-1
    fptr_a = exceptstar
    fptr_b = exceptstar
    fptr_c = exceptstar

_ERRORS = """
13:13: Cannot assign type 'int (int) except? -2' to 'int (*)(int) except -2'
14:13: Cannot assign type 'int (int) except? -2' to 'int (*)(int) except -1'
15:13: Cannot assign type 'int (int) except? -2' to 'int (*)(int) except? -1'
25:13: Cannot assign type 'int (int) except *' to 'int (*)(int) noexcept'
26:13: Cannot assign type 'int (int) except *' to 'int (*)(int) except -1'
27:13: Cannot assign type 'int (int) except *' to 'int (*)(int) except? -1'
"""