The strcmp optimization newly introduced in GCC 10 relies on the size of the smallest referenced array object to determine whether the function can return zero. When the size of the object is smaller than the length of the other string argument the optimization folds the equality to false. The bug report has identified a couple of problems here: 1) when the access to the array object is via a pointer to a (possibly indirect) member of a union, in GIMPLE the pointer may actually point to a different member than the one in the original source code. Thus the size of the array may appear to be smaller than in the source code which can then result in the optimization being invalid. 2) when the pointer in the access may point to two or more arrays of different size (i.e., it's the result of a PHI), assuming it points to the smallest of them can also lead to an incorrect result when the optimization is applied. The attached patch adjusts the optimization to 1) avoid making any assumptions about the sizes of objects accessed via union types, and b) use the size of the largest object in PHI nodes. Tested on x86_64-linux. Martin