On Mon, Jun 16, 2014 at 11:06:04AM +0200, Jan Hubicka wrote: > > > > Are the attached files acceptable? > > The testcase looks OK to me, but it already should be fixed on mainline > by patch https://gcc.gnu.org/ml/gcc-patches/2014-05/msg01315.html that > prevents dummy to be marked as constant. > > You can however modify the testcase to have > __attribute__ ((weak)) const int foo=0;
And the same for weak alias rather than straight weak definition like the above? > This needs your decl_replaceable change to not be optimized to if (0), > because of the explicit const modifier. The case I care about actually has "dummy" as const (with the intent that it be allocated in a read-only section if the dummy definition is used). So for me it's important that this regression be fixed too. > I did not change ctor_for_folding to reject variables above as I was not quite > sure we want to support this kind of interposition and I am still not quite > certain. > C++ is quite clear about the transformation replacing initialized const by > its value. My concern is about C, not C++. This kind of interposition has always been supported in unix C, even prior to GCC, going back to sysv or earlier, as a documented feature (historically #pragma weak). It should not regress. If fixing it results in an regression with regards to optimizability of C++, perhaps this could be made language-specific, or (better) the C++ front-end could add an additional internal-use-only attribute to weak definitions it generates internally that permits constant-folding them, while not breaking the semantics for weak definitions provided by the user at the source level. Rich