这是否违反了“restrict”的语义?

Does this violate the semantics of `restrict`?

注意 - 这与 restrict qualifier and pointer arithmetic 非常相似,但不是重复的。 post 的作者将对 restrict 指针的操作结果分配给同一个指针,而我将对 restrict 指针的操作结果作为参数分配给 restrict 函数参数.

我基本上理解 restrict 的含义,并且我开始养成在适用时声明函数参数 restrict 的习惯。但我不确定我是否在滥用它。

struct DynArray
{
    void* data;
    size_t elemCount;
    size_t len;
};

void dyn_append(DynArray* restrict dst, const void* restrict src, size_t srcLen, size_t elemSize)
{
    size_t oldElemCount = dst->elemCount;
    dyn_setElemCount(dst, dst->elemCount + srcLen, elemSize);    // might write to `*dst`
    if (dst->data)    // `dst->data` is set to `NULL` if reallocation fails.
        // The next line might violate "restrict-ness" of `dst`.
        memcpy((char*)dst->data + elemSize*oldElemCount, src, elemSize * srcLen);
} 

具体来说,我指的是调用 memcpy 时的 (char*)dst->data + elemSize*oldElemCount。如果我传递了 dst 本身而不是上面的参数,我知道它是有效的,因为我会将它分配给本身就是 restrict 的函数的参数。在这种情况下,参数是对 dst 而不是 dst 本身的操作结果这一事实是否改变了事情?我的理由是,参数不会被别名的保证包含在 dst 不会被别名的保证中。

这很好,但它实际上没有做任何事情,因为没有时间别名 dst 指针会导致不同的行为。