Skip to content

Commit 0da28aa

Browse files
author
kalibera
committed
Comments on visibility of inlined functions (re 87173).
git-svn-id: https://svn.r-project.org/R/trunk@87321 00db46b3-68df-0310-9c12-caf00c1e9a41
1 parent 2d35e05 commit 0da28aa

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

src/include/Rinlinedfuns.h

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,13 @@ SEXP CAR(SEXP e);
100100
#endif
101101

102102
#ifdef STRICT_TYPECHECK
103-
/*HIDDEN*/ INLINE_FUN void CHKVEC(SEXP x) {
103+
/* Functions called from other inline functions cannot be hidden, because
104+
the compiler may choose to inline the caller, but not the callee, causing
105+
a linking failure in the caller if the callee is hidden. The callees
106+
that were exposed due to this problem have comment "HIDDEN (inlining)",
107+
below.
108+
*/
109+
/*HIDDEN (inlining)*/ INLINE_FUN void CHKVEC(SEXP x) {
104110
switch (TYPEOF(x)) {
105111
case CHARSXP:
106112
case LGLSXP:
@@ -324,7 +330,7 @@ INLINE_FUN R_xlen_t XTRUELENGTH(SEXP x)
324330
# define CHECK_VECTOR_RAW_ELT(x, i) do { } while(0)
325331
#endif
326332

327-
/*HIDDEN*/ INLINE_FUN int *LOGICAL0(SEXP x) {
333+
/*HIDDEN (inlining)*/ INLINE_FUN int *LOGICAL0(SEXP x) {
328334
CHECK_STDVEC_LGL(x);
329335
return (int *) STDVEC_DATAPTR(x);
330336
}
@@ -337,15 +343,15 @@ HIDDEN INLINE_FUN void SET_SCALAR_LVAL(SEXP x, Rboolean v) {
337343
LOGICAL0(x)[0] = v;
338344
}
339345

340-
/*HIDDEN*/ INLINE_FUN int *INTEGER0(SEXP x) {
346+
/*HIDDEN (inlining)*/ INLINE_FUN int *INTEGER0(SEXP x) {
341347
CHECK_STDVEC_INT(x);
342348
return (int *) STDVEC_DATAPTR(x);
343349
}
344350
HIDDEN INLINE_FUN int SCALAR_IVAL(SEXP x) {
345351
CHECK_SCALAR_INT(x);
346352
return INTEGER0(x)[0];
347353
}
348-
/*HIDDEN*/ INLINE_FUN void SET_SCALAR_IVAL(SEXP x, int v) {
354+
/*HIDDEN (inlining)*/ INLINE_FUN void SET_SCALAR_IVAL(SEXP x, int v) {
349355
CHECK_SCALAR_INT(x);
350356
INTEGER0(x)[0] = v;
351357
}
@@ -358,7 +364,7 @@ HIDDEN INLINE_FUN double SCALAR_DVAL(SEXP x) {
358364
CHECK_SCALAR_REAL(x);
359365
return REAL0(x)[0];
360366
}
361-
/*HIDDEN*/ INLINE_FUN void SET_SCALAR_DVAL(SEXP x, double v) {
367+
/*HIDDEN (inlining)*/ INLINE_FUN void SET_SCALAR_DVAL(SEXP x, double v) {
362368
CHECK_SCALAR_REAL(x);
363369
REAL0(x)[0] = v;
364370
}
@@ -371,20 +377,20 @@ HIDDEN INLINE_FUN Rcomplex SCALAR_CVAL(SEXP x) {
371377
CHECK_SCALAR_CPLX(x);
372378
return COMPLEX0(x)[0];
373379
}
374-
/*HIDDEN*/ INLINE_FUN void SET_SCALAR_CVAL(SEXP x, Rcomplex v) {
380+
/*HIDDEN (inlining)*/ INLINE_FUN void SET_SCALAR_CVAL(SEXP x, Rcomplex v) {
375381
CHECK_SCALAR_CPLX(x);
376382
COMPLEX0(x)[0] = v;
377383
}
378384

379-
/*HIDDEN*/ INLINE_FUN Rbyte *RAW0(SEXP x) {
385+
/*HIDDEN (inlining)*/ INLINE_FUN Rbyte *RAW0(SEXP x) {
380386
CHECK_STDVEC_RAW(x);
381387
return (Rbyte *) STDVEC_DATAPTR(x);
382388
}
383389
HIDDEN INLINE_FUN Rbyte SCALAR_BVAL(SEXP x) {
384390
CHECK_SCALAR_RAW(x);
385391
return RAW0(x)[0];
386392
}
387-
/*HIDDEN*/ INLINE_FUN void SET_SCALAR_BVAL(SEXP x, Rbyte v) {
393+
/*HIDDEN (inlining)*/ INLINE_FUN void SET_SCALAR_BVAL(SEXP x, Rbyte v) {
388394
CHECK_SCALAR_RAW(x);
389395
RAW0(x)[0] = v;
390396
}

0 commit comments

Comments
 (0)