On Sat, Dec 14, 2019 at 09:30:08PM +0000, Ard Biesheuvel wrote: > On Sat, 14 Dec 2019 at 22:17, Arvind Sankar <nivedita@xxxxxxxxxxxx> wrote: > > > > Maybe just do > > if (sizeof(at) < sizeof(__ret)) > > __ret = (__typeof__(__ret))(uintptr_t)at; > > else > > __ret = (__typeof__(__ret))at; > > That should cover most of the cases. > > But the compiler will still be unhappy about the else clause if __ret > is a pointer type, since we'll be casting an u32 to a pointer, Ugh, yeah it complains even though it can tell at compile time that that branch isn't taken.