> > /* Variables declared 'const' without an initializer > > have zero as the initializer if they may not be > > overridden at link or run time. */ > > if (!DECL_INITIAL (real_decl) > > && (DECL_EXTERNAL (decl) || decl_replaceable_p (decl))) > > return error_mark_node; > > > > Honza? > > Indeed, this may be a better place to do it as long as > decl_replaceable_p reliably returns true for weak aliases. If so, the > following might work: > > if ((!DECL_INITIAL (real_decl) && DECL_EXTERNAL (decl)) > || decl_replaceable_p (decl))) > return error_mark_node; > > On the other hand, I might just separate it out into two separate if > statements since they should probably have their own comments.
Yep, this looks like correct change. I used to have FIXME on this but it seems it went away during some cleanups - the original condition was comming from expmed's folding and indeed it looked unsafe to me. This change is OK with the testcase (if it passes testing) Honza > > I would appreciate help from anyone familiar with GCC internals on > getting this right. > > Rich