Marshal.DestroyStructure is marked with the Pure attribute in the .NET Framework but I'm unsure as to why when it clearly has an effect on the context calling it.
The state is modified (the pointer is freed) even if it doesn't directly modify the pointer instance itself.
Implied in the question is: Can a developer, in good faith, mark something as Pure even if she knows it modifies the context's state indirectly?