From wdunlap at tibco.com  Fri Dec 29 17:52:40 2017
From: wdunlap at tibco.com (William Dunlap)
Date: Fri, 29 Dec 2017 08:52:40 -0800
Subject: [Rd] winbuilder warning message wrt function pointers
In-Reply-To: <CAF8bMcbWjrNX4uBKxDd__s9HvxZ+Xkesyk5odegO8CaUxhWqtw@mail.gmail.com>
References: <375144$8j4pe9@ironport10.mayo.edu>
 <CAF8bMcbWjrNX4uBKxDd__s9HvxZ+Xkesyk5odegO8CaUxhWqtw@mail.gmail.com>
Message-ID: <CAF8bMcaxsFdFPKbEL94jjadZtGJY6Bw_C9RLt18yqvbcrsQFpQ@mail.gmail.com>

And remove the cast on the return value of R_GETCCallable.  And check
that your function is found before using it.

#include <R.h>
#include <Rinternals.h>
#include <R_ext/Rdynload.h>

void bdsmatrix_prod4(int nrow,    int nblock,   int *bsize,
                    double *bmat, double *rmat,
                    int nfrail,   double *y) {
    DL_FUNC fun = NULL;
    if (fun==NULL) {
        fun = R_GetCCallable("bdsmatrix", "bdsmatrix_prod4");
    }
    if (fun==NULL) {
        Rf_error("Cannot find C function 'bdsmatrix_prod4' in library
'bdsmatrix.{so,dll}'");
    }
    fun(nrow, nblock, bsize, bmat, rmat, nfrail, y);
    }




Bill Dunlap
TIBCO Software
wdunlap tibco.com

On Fri, Dec 29, 2017 at 8:48 AM, William Dunlap <wdunlap at tibco.com> wrote:

> Try changing
>   static void (*fun)() = NULL;
> to
>   DL_FUNC fun = NULL;
>
> Bill Dunlap
> TIBCO Software
> wdunlap tibco.com
>
> On Fri, Dec 29, 2017 at 5:14 AM, Therneau, Terry M., Ph.D. <
> therneau at mayo.edu> wrote:
>
>> I've recently updated the coxme package, which calls internal routines
>> from the bdsmatrix package.  (It is in fact mentioned as an example of this
>> in the Extensions manual.)
>> The call connections are a blocks like this, one for each of the 9 called
>> C routines.
>>
>> void bdsmatrix_prod4(int nrow,    int nblock,   int *bsize,
>>                     double *bmat, double *rmat,
>>                     int nfrail,   double *y) {
>>     static void (*fun)() = NULL;
>>     if (fun==NULL)
>>     fun = (void (*)) R_GetCCallable("bdsmatrix", "bdsmatrix_prod4");
>>     fun(nrow, nblock, bsize, bmat, rmat, nfrail, y);
>>     }
>>
>> ..
>>
>> The winbuilder run is flagging all of these with
>>
>> bdsmatrix_stub.h:22:6: warning: ISO C forbids assignment between function
>> pointer and 'void *' [-Wpedantic]
>>   fun = (void (*)) R_GetCCallable("bdsmatrix", "bdsmatrix_prod4");
>>
>> Ignore?  Or should these lines have been written in a different way?
>>
>> Terry T.
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>
>

	[[alternative HTML version deleted]]



[Rd] winbuilder warning message wrt function pointers
William Dunlap