The following code produce an incorrect "Expression is always false" suggestion in R# 5.1.1707.19 on the "if (obj == null)" line.
public override bool Equals(object obj)
if (obj == null)
This is incorrect, because even though the object itself is a struct there is nothing stopping "obj" from being null. Another symptom of the same problem is that this line:
reports a "Possible null assignment to entity marked with 'NotNull' attribute" warning.
I think the meaning of the [NotNull] attribute has blurred a bit between "shouldn't be null" and "couldn't be null" here. If, as I understand, it means "shouldn't be null" then R# should not use it for the "expression is always true/false" warnings.