I've read a number of posts on the restrict keyword.  But virtually every example I can find seem to refer to input parameters only to a function and, perhaps a single value.  I need to clarify my understanding.
I've found a function that looks like it totally violates the rules of the keyword with both an input parameter and a local variable.
This function is called with a void* to a buffer and the pointer is declared as __restrict (this is Microsoft Visual C++).  Yet later in the function, a local variable pointer of type UCHAR* is declared and made to point to that same restricted input parameter buffer.
Here is a seriously chopped down version of the function I'm talking about:
void Foo(int nVersion, int nX, int nY, int nWidth, void * __restrict pBuffer) const
{
    // ... blah blah blah
    UCHAR * __restrict pBufferPtr = ((UCHAR *) pBuffer) + 10;  // Isn't this aliasing?
    const void * __restrict pData =  (blah blah blah);     //... Get from some function call;
    memcpy(pBufferPtr, pData, nWidth);
}
Does the above example violate the rules of restrict?