http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52779
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> 2012-03-30 01:39:59 UTC --- A better understanding of what happens. Arrays in both the C and C++ front-end are treated in an interesting way. The array's main variant is the array of the element types' main variant. That is the const char[4]'s main variant is char[4]. But when we doing the folding for printf to puts, this no longer holds for that const char[4] type. So when we do the merging of the type const char[4] for the first TU to the second one, we have created an array type with a main variant which is different from what the C/C++ front-end produces. And then comes the last TU, where we have this main variant that is different. So we warn that char and const char are different, even if we don't care about them being different variants because the front-end does not. 4.7 fixes it by using types_compatible instead of gimple_types_compatible. Now we still have this main variant issue that is latent in 4.7 and above. Should we fix that issue or just ignore it and how it does not matter?