OK, so now I understand the meaning of this struct. So the constant expression is either (1) an address of global variable or function plus an offset, or (2) just an integer. If label is set, it's a name of a global identifier. Is this correct?

"label" is a bit misleading name, as global identifiers are not labels in C. In the resultant assembly, they are down to labels, but they are not labels until then. Also "constant" is not a constant to the compiler. I'd probably name them "var" and "offset".