https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101515
--- Comment #7 from qinzhao at gcc dot gnu.org --- for the following IR: struct sp x; void (*<T389>) (void) _1; ... <bb 2> [local count: 1073741824]: _1 = MEM[(struct ptrmemfunc_U *)&x].ptr; _7 = _1 != 8B; ***Before commit r11-6729-gadb520606ce3e1e1. it reported: t.cc:19:11: warning: ‘x.ptrmemfunc_U::ptr’ is used uninitialized [-Wuninitialized] ***After commit r11-6729-gadb520606ce3e1e1. 1. without the patch in comment #6: ICE. 2. with the patch in comment #6: it reported: t.cc:19:11: warning: ‘*(ptrmemfunc_U*)((char*)&x + offsetof(void (S::*)(),<unnamed type>::__pfn)).ptrmemfunc_U::ptr’ is used uninitialized [-Wuninitialized] ***The major difference between the message before r11-6729-gadb520606ce3e1e1 and after it is: in the message after this commit, (if resolved the ICE), the type conversion from "S::ptrmemfunc" to ptrmemfunc_U is emitted in the message, before this commit, this type conversion is not emitted at all. So, the question is: shall we expose the type conversion from "S::ptrmemfunc" to "ptrmemfunc_U" to the user?