<html>#2512: Enable detection of `attribute(pure)`
<table style='border-spacing: 1ex 0pt; '>
<tr><td style='text-align:right'> Reporter:</td><td>Erik Schnetter</td></tr>
<tr><td style='text-align:right'>   Status:</td><td>new</td></tr>
<tr><td style='text-align:right'>Milestone:</td><td></td></tr>
<tr><td style='text-align:right'>  Version:</td><td>development version</td></tr>
<tr><td style='text-align:right'>     Type:</td><td>proposal</td></tr>
<tr><td style='text-align:right'> Priority:</td><td>minor</td></tr>
<tr><td style='text-align:right'>Component:</td><td>Cactus</td></tr>
</table>

<p>Comment (by Erik Schnetter):</p>
<p>Access checking should instead done by the driver when it calls a scheduled function. Before the call, the driver fills in <code>cctkGH</code> with the pointers to all (!) variables and time levels. Checking access there would be straightforward (in Carpet and CarpetX, not in PUGH), and would also be cheaper since group-wise calculations have to be done only once per group, not once per variable. <code>CCTK_VarDataPtrI</code> would then simply look up the pointer in <code>cctkGH</code>, with proper index checking. The latter could also be avoided if we trust the driver.</p>
<p>The checked macros also call <code>CCTK_VarDataPtrI</code>.</p>
<p>Overall, this would reduce overhead both in the driver an in the flesh.</p>
<p>--<br/>
Ticket URL: <a href='https://bitbucket.org/einsteintoolkit/tickets/issues/2512/enable-detection-of-attribute-pure'>https://bitbucket.org/einsteintoolkit/tickets/issues/2512/enable-detection-of-attribute-pure</a></p>
</html>