On Wed, Aug 29, 2018 at 6:45 PM Jose E. Marchesi <jose.march...@oracle.com> wrote: > > > Hi people! > > I found this compilation problem while building today's trunk with GCC > 4.4.7 [1] in a RHEL 6.9 derivative in sparc64: > > g++ -fno-PIE -c -g -DIN_GCC -fno-exceptions -fno-rtti > -fasynchronous-unwind-tables -W -Wall -Wwrite-strings -Wcast-qual -Wno-format > -Wmissing-format-attribute -Woverloaded-virtual -pedantic -Wno-long-long > -Wno-variadic-macros -Wno-overlength-strings -fno-common -Wno-unused > -DHAVE_CONFIG_H -I. -I. -I../../gcc -I../../gcc/. -I../../gcc/../include > -I../../gcc/../libcpp/include -I/home/jemarch/couts3/gcc/build/./gmp > -I/home/jemarch/couts3/gcc/gmp -I/home/jemarch/couts3/gcc/build/./mpfr/src > -I/home/jemarch/couts3/gcc/mpfr/src -I/home/jemarch/couts3/gcc/mpc/src > -I../../gcc/../libdecnumber -I../../gcc/../libdecnumber/dpd -I../libdecnumber > -I../../gcc/../libbacktrace -I/home/jemarch/couts3/gcc/build/./isl/include > -I/home/jemarch/couts3/gcc/isl/include -o gimple-match.o -MT gimple-match.o > -MMD -MP -MF ./.deps/gimple-match.TPo gimple-match.c > In file included from ../../gcc/backend.h:33, > from ../../gcc/gimple-match-head.c:23, > from gimple-match.c:4: > ../../gcc/cfg.h: In constructor ‘auto_edge_flag::auto_edge_flag(function*)’: > ../../gcc/cfg.h:172: error: class ‘auto_edge_flag’ does not have any field > named ‘auto_flag’ > ../../gcc/cfg.h:172: error: no matching function for call to > ‘auto_flag<int>::auto_flag()’ > ../../gcc/cfg.h:137: note: candidates are: auto_flag<T>::auto_flag(T*) [with > T = int] > ../../gcc/cfg.h:134: note: auto_flag<int>::auto_flag(const > auto_flag<int>&) > ../../gcc/cfg.h: In constructor ‘auto_bb_flag::auto_bb_flag(function*)’: > ../../gcc/cfg.h:181: error: class ‘auto_bb_flag’ does not have any field > named ‘auto_flag’ > ../../gcc/cfg.h:181: error: no matching function for call to > ‘auto_flag<int>::auto_flag()’ > ../../gcc/cfg.h:137: note: candidates are: auto_flag<T>::auto_flag(T*) [with > T = int] > ../../gcc/cfg.h:134: note: auto_flag<int>::auto_flag(const > auto_flag<int>&) > > > I reckon the code in question (the definition of the classes > auto_edge_class and auto_bb_flag) is perfectly valid C++, and indeed GCC > 6.3.0 compiles it with no problem. > > However, I used the following local modification to workaround the > problem:
The patch is OK - thanks for noticing. Richard. > diff --git a/gcc/cfg.h b/gcc/cfg.h > index 9fff135..3d660bd 100644 > --- a/gcc/cfg.h > +++ b/gcc/cfg.h > @@ -169,7 +169,7 @@ class auto_edge_flag : public auto_flag<int> > { > public: > auto_edge_flag (function *fun) > - : auto_flag (&fun->cfg->edge_flags_allocated) {} > + : auto_flag<int> (&fun->cfg->edge_flags_allocated) {} > }; > > /* RAII class to allocate a bb flag for temporary use. You have > @@ -178,7 +178,7 @@ class auto_bb_flag : public auto_flag<int> > { > public: > auto_bb_flag (function *fun) > - : auto_flag (&fun->cfg->bb_flags_allocated) {} > + : auto_flag<int> (&fun->cfg->bb_flags_allocated) {} > }; > > #endif /* GCC_CFG_H */ > > > Considering that 4.4.7 is the default compiler in RHEL 6.x, you may be > interested in installing a similar workaround, or a better one. > > Hence this email :) > Salud! > > [1] gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-18.0.4)