Remove warnings about impure functions that might not be evaluated (-Wfunction-elimination)
Mark various MATLAB/MEX primitives as pure.kalman-mex
parent
e0bc9f29a1
commit
f23dd8c981
|
@ -27,6 +27,9 @@
|
||||||
! “contiguous” (which is always the case for C arrays). This will help the
|
! “contiguous” (which is always the case for C arrays). This will help the
|
||||||
! Fortran compiler better optimize the code (in some cases, this will avoid
|
! Fortran compiler better optimize the code (in some cases, this will avoid
|
||||||
! array copies)
|
! array copies)
|
||||||
|
! – If the function has no side-effect, mark it as “pure”, to avoid gfortran
|
||||||
|
! warnings when the function may not be evaluated depending on the branch
|
||||||
|
! (-Wfunction-elimination)
|
||||||
|
|
||||||
! Copyright © 2019-2023 Dynare Team
|
! Copyright © 2019-2023 Dynare Team
|
||||||
!
|
!
|
||||||
|
@ -80,32 +83,32 @@ module matlab_mat
|
||||||
|
|
||||||
interface
|
interface
|
||||||
!! mxArray attributes
|
!! mxArray attributes
|
||||||
logical(c_bool) function mxIsNumeric(pm) bind(c, name="mxIsNumeric"//API_VER)
|
pure logical(c_bool) function mxIsNumeric(pm) bind(c, name="mxIsNumeric"//API_VER)
|
||||||
use iso_c_binding
|
use iso_c_binding
|
||||||
type(c_ptr), intent(in), value :: pm
|
type(c_ptr), intent(in), value :: pm
|
||||||
end function mxIsNumeric
|
end function mxIsNumeric
|
||||||
|
|
||||||
logical(c_bool) function mxIsComplex(pm) bind(c, name="mxIsComplex"//API_VER)
|
pure logical(c_bool) function mxIsComplex(pm) bind(c, name="mxIsComplex"//API_VER)
|
||||||
use iso_c_binding
|
use iso_c_binding
|
||||||
type(c_ptr), intent(in), value :: pm
|
type(c_ptr), intent(in), value :: pm
|
||||||
end function mxIsComplex
|
end function mxIsComplex
|
||||||
|
|
||||||
integer(c_size_t) function mxGetNumberOfElements(pm) bind(c, name="mxGetNumberOfElements"//API_VER)
|
pure integer(c_size_t) function mxGetNumberOfElements(pm) bind(c, name="mxGetNumberOfElements"//API_VER)
|
||||||
use iso_c_binding
|
use iso_c_binding
|
||||||
type(c_ptr), intent(in), value :: pm
|
type(c_ptr), intent(in), value :: pm
|
||||||
end function mxGetNumberOfElements
|
end function mxGetNumberOfElements
|
||||||
|
|
||||||
integer(c_size_t) function mxGetM(pm) bind(c, name="mxGetM"//API_VER)
|
pure integer(c_size_t) function mxGetM(pm) bind(c, name="mxGetM"//API_VER)
|
||||||
use iso_c_binding
|
use iso_c_binding
|
||||||
type(c_ptr), intent(in), value :: pm
|
type(c_ptr), intent(in), value :: pm
|
||||||
end function mxGetM
|
end function mxGetM
|
||||||
|
|
||||||
integer(c_size_t) function mxGetN(pm) bind(c, name="mxGetN"//API_VER)
|
pure integer(c_size_t) function mxGetN(pm) bind(c, name="mxGetN"//API_VER)
|
||||||
use iso_c_binding
|
use iso_c_binding
|
||||||
type(c_ptr), intent(in), value :: pm
|
type(c_ptr), intent(in), value :: pm
|
||||||
end function mxGetN
|
end function mxGetN
|
||||||
|
|
||||||
logical(c_bool) function mxIsEmpty(pm) bind(c, name="mxIsEmpty"//API_VER)
|
pure logical(c_bool) function mxIsEmpty(pm) bind(c, name="mxIsEmpty"//API_VER)
|
||||||
use iso_c_binding
|
use iso_c_binding
|
||||||
type(c_ptr), intent(in), value :: pm
|
type(c_ptr), intent(in), value :: pm
|
||||||
end function mxIsEmpty
|
end function mxIsEmpty
|
||||||
|
@ -126,36 +129,36 @@ module matlab_mat
|
||||||
end function mxCreateDoubleScalar
|
end function mxCreateDoubleScalar
|
||||||
|
|
||||||
! Noncomplex Float
|
! Noncomplex Float
|
||||||
logical(c_bool) function mxIsScalar(array_ptr) bind(c, name="mxIsScalar"//API_VER)
|
pure logical(c_bool) function mxIsScalar(array_ptr) bind(c, name="mxIsScalar"//API_VER)
|
||||||
use iso_c_binding
|
use iso_c_binding
|
||||||
type(c_ptr), intent(in), value :: array_ptr
|
type(c_ptr), intent(in), value :: array_ptr
|
||||||
end function mxIsScalar
|
end function mxIsScalar
|
||||||
|
|
||||||
real(c_double) function mxGetScalar(pm) bind(c, name="mxGetScalar"//API_VER)
|
pure real(c_double) function mxGetScalar(pm) bind(c, name="mxGetScalar"//API_VER)
|
||||||
use iso_c_binding
|
use iso_c_binding
|
||||||
type(c_ptr), intent(in), value :: pm
|
type(c_ptr), intent(in), value :: pm
|
||||||
end function mxGetScalar
|
end function mxGetScalar
|
||||||
|
|
||||||
logical(c_bool) function mxIsDouble(pm) bind(c, name="mxIsDouble"//API_VER)
|
pure logical(c_bool) function mxIsDouble(pm) bind(c, name="mxIsDouble"//API_VER)
|
||||||
use iso_c_binding
|
use iso_c_binding
|
||||||
type(c_ptr), intent(in), value :: pm
|
type(c_ptr), intent(in), value :: pm
|
||||||
end function mxIsDouble
|
end function mxIsDouble
|
||||||
|
|
||||||
#if MX_HAS_INTERLEAVED_COMPLEX
|
#if MX_HAS_INTERLEAVED_COMPLEX
|
||||||
type(c_ptr) function mxGetDoubles_internal(pm) bind(c, name="mxGetDoubles"//API_VER)
|
pure type(c_ptr) function mxGetDoubles_internal(pm) bind(c, name="mxGetDoubles"//API_VER)
|
||||||
use iso_c_binding
|
use iso_c_binding
|
||||||
type(c_ptr), intent(in), value :: pm
|
type(c_ptr), intent(in), value :: pm
|
||||||
end function mxGetDoubles_internal
|
end function mxGetDoubles_internal
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
type(c_ptr) function mxGetPr_internal(pm) bind(c, name="mxGetPr"//API_VER)
|
pure type(c_ptr) function mxGetPr_internal(pm) bind(c, name="mxGetPr"//API_VER)
|
||||||
use iso_c_binding
|
use iso_c_binding
|
||||||
type(c_ptr), intent(in), value :: pm
|
type(c_ptr), intent(in), value :: pm
|
||||||
end function mxGetPr_internal
|
end function mxGetPr_internal
|
||||||
|
|
||||||
! Noncomplex integer
|
! Noncomplex integer
|
||||||
#if MX_HAS_INTERLEAVED_COMPLEX
|
#if MX_HAS_INTERLEAVED_COMPLEX
|
||||||
type(c_ptr) function mxGetInt32s_internal(pa) bind(c, name="mxGetInt32s"//API_VER)
|
pure type(c_ptr) function mxGetInt32s_internal(pa) bind(c, name="mxGetInt32s"//API_VER)
|
||||||
use iso_c_binding
|
use iso_c_binding
|
||||||
type(c_ptr), intent(in), value :: pa
|
type(c_ptr), intent(in), value :: pa
|
||||||
end function mxGetInt32s_internal
|
end function mxGetInt32s_internal
|
||||||
|
@ -163,12 +166,12 @@ module matlab_mat
|
||||||
|
|
||||||
! Complex Float
|
! Complex Float
|
||||||
#if MX_HAS_INTERLEAVED_COMPLEX
|
#if MX_HAS_INTERLEAVED_COMPLEX
|
||||||
type(c_ptr) function mxGetComplexDoubles_internal(pa) bind(c, name="mxGetComplexDoubles"//API_VER)
|
pure type(c_ptr) function mxGetComplexDoubles_internal(pa) bind(c, name="mxGetComplexDoubles"//API_VER)
|
||||||
use iso_c_binding
|
use iso_c_binding
|
||||||
type(c_ptr), intent(in), value :: pa
|
type(c_ptr), intent(in), value :: pa
|
||||||
end function mxGetComplexDoubles_internal
|
end function mxGetComplexDoubles_internal
|
||||||
#else
|
#else
|
||||||
type(c_ptr) function mxGetPi_internal(pm) bind(c, name="mxGetPi"//API_VER)
|
pure type(c_ptr) function mxGetPi_internal(pm) bind(c, name="mxGetPi"//API_VER)
|
||||||
use iso_c_binding
|
use iso_c_binding
|
||||||
type(c_ptr), intent(in), value :: pm
|
type(c_ptr), intent(in), value :: pm
|
||||||
end function mxGetPi_internal
|
end function mxGetPi_internal
|
||||||
|
@ -182,40 +185,40 @@ module matlab_mat
|
||||||
integer(mxComplexity), intent(in), value :: ComplexFlag
|
integer(mxComplexity), intent(in), value :: ComplexFlag
|
||||||
end function mxCreateSparse
|
end function mxCreateSparse
|
||||||
|
|
||||||
logical(c_bool) function mxIsSparse(pm) bind(c, name="mxIsSparse"//API_VER)
|
pure logical(c_bool) function mxIsSparse(pm) bind(c, name="mxIsSparse"//API_VER)
|
||||||
use iso_c_binding
|
use iso_c_binding
|
||||||
type(c_ptr), intent(in), value :: pm
|
type(c_ptr), intent(in), value :: pm
|
||||||
end function mxIsSparse
|
end function mxIsSparse
|
||||||
|
|
||||||
type(c_ptr) function mxGetIr(pm) bind(c, name="mxGetIr"//API_VER2)
|
pure type(c_ptr) function mxGetIr(pm) bind(c, name="mxGetIr"//API_VER2)
|
||||||
use iso_c_binding
|
use iso_c_binding
|
||||||
type(c_ptr), intent(in), value :: pm
|
type(c_ptr), intent(in), value :: pm
|
||||||
end function mxGetIr
|
end function mxGetIr
|
||||||
|
|
||||||
type(c_ptr) function mxGetJc(pm) bind(c, name="mxGetJc"//API_VER2)
|
pure type(c_ptr) function mxGetJc(pm) bind(c, name="mxGetJc"//API_VER2)
|
||||||
use iso_c_binding
|
use iso_c_binding
|
||||||
type(c_ptr), intent(in), value :: pm
|
type(c_ptr), intent(in), value :: pm
|
||||||
end function mxGetJc
|
end function mxGetJc
|
||||||
|
|
||||||
! Nonnumeric types
|
! Nonnumeric types
|
||||||
type(c_ptr) function mxGetData(pm) bind(c, name="mxGetData"//API_VER)
|
pure type(c_ptr) function mxGetData(pm) bind(c, name="mxGetData"//API_VER)
|
||||||
use iso_c_binding
|
use iso_c_binding
|
||||||
type(c_ptr), intent(in), value :: pm
|
type(c_ptr), intent(in), value :: pm
|
||||||
end function mxGetData
|
end function mxGetData
|
||||||
|
|
||||||
! Character
|
! Character
|
||||||
logical(c_bool) function mxIsChar(pm) bind(c, name="mxIsChar"//API_VER)
|
pure logical(c_bool) function mxIsChar(pm) bind(c, name="mxIsChar"//API_VER)
|
||||||
use iso_c_binding
|
use iso_c_binding
|
||||||
type(c_ptr), intent(in), value :: pm
|
type(c_ptr), intent(in), value :: pm
|
||||||
end function mxIsChar
|
end function mxIsChar
|
||||||
|
|
||||||
! Logical
|
! Logical
|
||||||
logical(c_bool) function mxIsLogical(pm) bind(c, name="mxIsLogical"//API_VER)
|
pure logical(c_bool) function mxIsLogical(pm) bind(c, name="mxIsLogical"//API_VER)
|
||||||
use iso_c_binding
|
use iso_c_binding
|
||||||
type(c_ptr), intent(in), value :: pm
|
type(c_ptr), intent(in), value :: pm
|
||||||
end function mxIsLogical
|
end function mxIsLogical
|
||||||
|
|
||||||
logical(c_bool) function mxIsLogicalScalar(array_ptr) bind(c, name="mxIsLogicalScalar"//API_VER)
|
pure logical(c_bool) function mxIsLogicalScalar(array_ptr) bind(c, name="mxIsLogicalScalar"//API_VER)
|
||||||
use iso_c_binding
|
use iso_c_binding
|
||||||
type(c_ptr), intent(in), value :: array_ptr
|
type(c_ptr), intent(in), value :: array_ptr
|
||||||
end function mxIsLogicalScalar
|
end function mxIsLogicalScalar
|
||||||
|
@ -226,13 +229,13 @@ module matlab_mat
|
||||||
logical(mxLogical), intent(in), value :: value
|
logical(mxLogical), intent(in), value :: value
|
||||||
end function mxCreateLogicalScalar
|
end function mxCreateLogicalScalar
|
||||||
|
|
||||||
type(c_ptr) function mxGetLogicals_internal(array_ptr) bind(c, name="mxGetLogicals"//API_VER)
|
pure type(c_ptr) function mxGetLogicals_internal(array_ptr) bind(c, name="mxGetLogicals"//API_VER)
|
||||||
use iso_c_binding
|
use iso_c_binding
|
||||||
type(c_ptr), intent(in), value :: array_ptr
|
type(c_ptr), intent(in), value :: array_ptr
|
||||||
end function mxGetLogicals_internal
|
end function mxGetLogicals_internal
|
||||||
|
|
||||||
! Object
|
! Object
|
||||||
logical(c_bool) function mxIsClass_internal(pm, classname) bind(c, name="mxIsClass"//API_VER)
|
pure logical(c_bool) function mxIsClass_internal(pm, classname) bind(c, name="mxIsClass"//API_VER)
|
||||||
use iso_c_binding
|
use iso_c_binding
|
||||||
type(c_ptr), intent(in), value :: pm
|
type(c_ptr), intent(in), value :: pm
|
||||||
character(c_char), dimension(*), intent(in) :: classname
|
character(c_char), dimension(*), intent(in) :: classname
|
||||||
|
@ -247,12 +250,12 @@ module matlab_mat
|
||||||
type(c_ptr), dimension(*), intent(in) :: fieldnames
|
type(c_ptr), dimension(*), intent(in) :: fieldnames
|
||||||
end function mxCreateStructMatrix_internal
|
end function mxCreateStructMatrix_internal
|
||||||
|
|
||||||
logical(c_bool) function mxIsStruct(pm) bind(c, name="mxIsStruct"//API_VER)
|
pure logical(c_bool) function mxIsStruct(pm) bind(c, name="mxIsStruct"//API_VER)
|
||||||
use iso_c_binding
|
use iso_c_binding
|
||||||
type(c_ptr), intent(in), value :: pm
|
type(c_ptr), intent(in), value :: pm
|
||||||
end function mxIsStruct
|
end function mxIsStruct
|
||||||
|
|
||||||
type(c_ptr) function mxGetField_internal(pm, index, fieldname) bind(c, name="mxGetField"//API_VER2)
|
pure type(c_ptr) function mxGetField_internal(pm, index, fieldname) bind(c, name="mxGetField"//API_VER2)
|
||||||
use iso_c_binding
|
use iso_c_binding
|
||||||
import :: mwIndex
|
import :: mwIndex
|
||||||
type(c_ptr), intent(in), value :: pm
|
type(c_ptr), intent(in), value :: pm
|
||||||
|
@ -269,18 +272,18 @@ module matlab_mat
|
||||||
character(c_char), dimension(*), intent(in) :: fieldname
|
character(c_char), dimension(*), intent(in) :: fieldname
|
||||||
end subroutine mxSetField_internal
|
end subroutine mxSetField_internal
|
||||||
|
|
||||||
integer(c_int) function mxGetNumberOfFields(pm) bind(c, name="mxGetNumberOfFields"//API_VER)
|
pure integer(c_int) function mxGetNumberOfFields(pm) bind(c, name="mxGetNumberOfFields"//API_VER)
|
||||||
use iso_c_binding
|
use iso_c_binding
|
||||||
type(c_ptr), intent(in), value :: pm
|
type(c_ptr), intent(in), value :: pm
|
||||||
end function mxGetNumberOfFields
|
end function mxGetNumberOfFields
|
||||||
|
|
||||||
! Cell
|
! Cell
|
||||||
logical(c_bool) function mxIsCell(pm) bind(c, name="mxIsCell"//API_VER)
|
pure logical(c_bool) function mxIsCell(pm) bind(c, name="mxIsCell"//API_VER)
|
||||||
use iso_c_binding
|
use iso_c_binding
|
||||||
type(c_ptr), intent(in), value :: pm
|
type(c_ptr), intent(in), value :: pm
|
||||||
end function mxIsCell
|
end function mxIsCell
|
||||||
|
|
||||||
type(c_ptr) function mxGetCell_internal(pm, index) bind(c, name="mxGetCell"//API_VER2)
|
pure type(c_ptr) function mxGetCell_internal(pm, index) bind(c, name="mxGetCell"//API_VER2)
|
||||||
use iso_c_binding
|
use iso_c_binding
|
||||||
import :: mwIndex
|
import :: mwIndex
|
||||||
type(c_ptr), intent(in), value :: pm
|
type(c_ptr), intent(in), value :: pm
|
||||||
|
@ -351,7 +354,7 @@ contains
|
||||||
call c_f_pointer(mxGetLogicals_internal(array_ptr), mxGetLogicals, [ mxGetNumberOfElements(array_ptr) ])
|
call c_f_pointer(mxGetLogicals_internal(array_ptr), mxGetLogicals, [ mxGetNumberOfElements(array_ptr) ])
|
||||||
end function mxGetLogicals
|
end function mxGetLogicals
|
||||||
|
|
||||||
logical(c_bool) function mxIsClass(pm, classname)
|
pure logical(c_bool) function mxIsClass(pm, classname)
|
||||||
type(c_ptr), intent(in) :: pm
|
type(c_ptr), intent(in) :: pm
|
||||||
character(kind=c_char, len=*), intent(in) :: classname
|
character(kind=c_char, len=*), intent(in) :: classname
|
||||||
mxIsclass = mxIsclass_internal(pm, classname // c_null_char)
|
mxIsclass = mxIsclass_internal(pm, classname // c_null_char)
|
||||||
|
@ -371,7 +374,7 @@ contains
|
||||||
mxCreateStructMatrix = mxCreateStructMatrix_internal(m, n, size(fieldnames), fieldnames_ptr)
|
mxCreateStructMatrix = mxCreateStructMatrix_internal(m, n, size(fieldnames), fieldnames_ptr)
|
||||||
end function mxCreateStructMatrix
|
end function mxCreateStructMatrix
|
||||||
|
|
||||||
type(c_ptr) function mxGetField(pm, index, fieldname)
|
pure type(c_ptr) function mxGetField(pm, index, fieldname)
|
||||||
type(c_ptr), intent(in) :: pm
|
type(c_ptr), intent(in) :: pm
|
||||||
integer(mwIndex), intent(in) :: index
|
integer(mwIndex), intent(in) :: index
|
||||||
character(kind=c_char, len=*), intent(in) :: fieldname
|
character(kind=c_char, len=*), intent(in) :: fieldname
|
||||||
|
@ -386,7 +389,7 @@ contains
|
||||||
call mxSetField_internal(pm, index-1, fieldname // c_null_char, pvalue)
|
call mxSetField_internal(pm, index-1, fieldname // c_null_char, pvalue)
|
||||||
end subroutine mxSetField
|
end subroutine mxSetField
|
||||||
|
|
||||||
type(c_ptr) function mxGetCell(pm, index)
|
pure type(c_ptr) function mxGetCell(pm, index)
|
||||||
type(c_ptr), intent(in) :: pm
|
type(c_ptr), intent(in) :: pm
|
||||||
integer(mwIndex), intent(in) :: index
|
integer(mwIndex), intent(in) :: index
|
||||||
mxGetCell = mxGetCell_internal(pm, index-1)
|
mxGetCell = mxGetCell_internal(pm, index-1)
|
||||||
|
|
Loading…
Reference in New Issue