This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH 2/2] C++ FE: handle misspelled identifiers and typenames
- From: David Malcolm <dmalcolm at redhat dot com>
- To: Uros Bizjak <ubizjak at gmail dot com>, "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>
- Cc: Jeff Law <law at redhat dot com>
- Date: Thu, 21 Jul 2016 10:38:05 -0400
- Subject: Re: [PATCH 2/2] C++ FE: handle misspelled identifiers and typenames
- Authentication-results: sourceware.org; auth=none
- References: <CAFULd4a+9X_Nvbpmt-MSnXiHED1gqOSuqfyTRyk2HKUFP3O=ig@mail.gmail.com> <1469111299.29375.16.camel@redhat.com>
On Thu, 2016-07-21 at 10:28 -0400, David Malcolm wrote:
> On Thu, 2016-07-21 at 09:00 +0200, Uros Bizjak wrote:
> > Hello!
> >
> > > > gcc/ChangeLog:
> > > > PR c/70339
> > > > * diagnostic-show-locus.c (diagnostic_show_locus): If this is
> > > > the
> > > > same location as last time, don't skip if we have fix-it hints.
> > > > Clarify the skipping logic by converting it from one "if"
> > > > clause
> > > > to repeated "if" clauses.
> > > > * spellcheck-tree.c: Include "cpplib.h".
> > > > (find_closest_macro_cpp_cb): Move here from c/c-decl.c.
> > > > (best_macro_match::best_macro_match): New constructor.
> > > > * spellcheck-tree.h (struct edit_distance_traits<cpp_hashnode
> > > > *>):
> > > > Move here from c/c-decl.c.
> > > > (class best_macro_match): Move here from c/c-decl.c, converting
> > > > from a typedef to a subclass, gaining a ctor.
> >
> > This part introduced bootstrap failure on CentOS 5.11:
> >
> > g++ -std=gnu++98 -fno-PIE -c -g -DIN_GCC -fno-strict-aliasing
> > -fno-exceptions -fno-rtti -fasynchronous-unwind-tables -W -Wall
> > -Wwrite-strings -Wcast-qual -Wno-format -Wmissing-format-attribute
> > -Woverloaded-virtual -fno-common -DHAVE_CONFIG_H -I. -I.
> > -I../../git/gcc/gcc -I../../git/gcc/gcc/.
> > -I../../git/gcc/gcc/../include
> > -I../../git/gcc/gcc/../libcpp/include
> > -I/usr/local/include -I/usr/local/include -I/usr/local/include
> > -I../../git/gcc/gcc/../libdecnumber
> > -I../../git/gcc/gcc/../libdecnumber/bid -I../libdecnumber
> > -I../../git/gcc/gcc/../libbacktrace -o spellcheck-tree.o -MT
> > spellcheck-tree.o -MMD -MP -MF ./.deps/spellcheck-tree.TPo
> > ../../git/gcc/gcc/spellcheck-tree.c
> > ../../git/gcc/gcc/spellcheck-tree.c: In constructor
> > ‘best_macro_match::best_macro_match(tree_node*, edit_distance_t,
> > cpp_reader*)’:
> > ../../git/gcc/gcc/spellcheck-tree.c:94: error: class
> > ‘best_macro_match’ does not have any field named ‘best_match’
> > ../../git/gcc/gcc/spellcheck-tree.c:94: error: no matching function
> > for call to ‘best_match<tree_node*, cpp_hashnode*>::best_match()’
> > ../../git/gcc/gcc/spellcheck.h:91: note: candidates are:
> > best_match<GOAL_TYPE, CANDIDATE_TYPE>::best_match(GOAL_TYPE,
> > edit_distance_t) [with GOAL_TYPE = tree_node*, CANDIDATE_TYPE =
> > cpp_hashnode*]
> > ../../git/gcc/gcc/spellcheck.h:81: note:
> > best_match<tree_node*, cpp_hashnode*>::best_match(const
> > best_match<tree_node*, cpp_hashnode*>&)
> > gmake: *** [spellcheck-tree.o] Error 1
> >
> > CentOS 5 has pretty old system compiler [gcc version 4.1.2 20080704
> > (Red Hat 4.1.2-55)], but the build worked until the above patch was
> > committed. Is it possible to work around this failure somehow?
>
> Sorry about the breakage.
>
> I've now built a gcc 4.1 locally, and with that I can reproduce the
> issue. Am investigating...
The following patch seems to fix it; successfully compiles that file
with my local builds of gcc 7 and gcc 4.1 (and with Fedora system gcc
4.8.3).
Does it fix the build for you?
Bootstrap®rtesting underway here.
gcc/ChangeLog:
* spellcheck-tree.c (best_macro_match::best_macro_match):
Explicitly specify the template arguments when invoking the base
class constructor, to help older C++ compilers.
Sorry again about the breakage.
Dave
diff --git a/gcc/spellcheck-tree.c b/gcc/spellcheck-tree.c
index ef1e689..99a8dba 100644
--- a/gcc/spellcheck-tree.c
+++ b/gcc/spellcheck-tree.c
@@ -91,7 +91,7 @@ find_closest_macro_cpp_cb (cpp_reader *, cpp_hashnode *hashnode,
best_macro_match::best_macro_match (tree goal,
edit_distance_t best_distance_so_far,
cpp_reader *reader)
- : best_match (goal, best_distance_so_far)
+: best_match <goal_t, candidate_t> (goal, best_distance_so_far)
{
cpp_forall_identifiers (reader, find_closest_macro_cpp_cb, this);
}