Huh, I assumed (just as you did) that this would obviously not work -- but you're right that GCC ignores this and allows the assignment anyway.
However it turns out that you still get a build error, and even the more explicit versions also give you a error:
kernel/cred.c:763:17: error: assignment of member ‘euid’ in read-only object
763 | current_euid() = GLOBAL_ROOT_UID;
| ^
kernel/cred.c:764:23: error: assignment of member ‘euid’ in read-only object
764 | current_cred()->euid = GLOBAL_ROOT_UID;
| ^
kernel/cred.c:765:22: error: assignment of member ‘euid’ in read-only object
765 | current->cred->euid = GLOBAL_ROOT_UID;
| ^
So it is blocked but not for the reason I thought. current_cred() returns a const pointer and all of the cred pointers in task_struct are also const. So you'd need to do something more like:
((struct cred *)current_cred())->euid = GLOBAL_ROOT_UID;
Which is well beyond "eyebrow-raising" territory.