diff mbox

[2/2] C++ FE: handle misspelled identifiers and typenames

Message ID 1469111885.29375.21.camel@redhat.com
State New
Headers show

Commit Message

David Malcolm July 21, 2016, 2:38 p.m. UTC
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&regrtesting 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

Comments

David Malcolm July 21, 2016, 5:23 p.m. UTC | #1
On Thu, 2016-07-21 at 10:38 -0400, David Malcolm wrote:
> 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&regrtesting 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.

This patch survived bootstrap&regrtest, and compiles and runs OK with
gcc-4.1, so I've committed it to trunk as r238598 (under the "obvious"
rule).

Please let me know if there are any configurations for which it still
doesn't work.

Sorry again.

Dave
Uros Bizjak July 22, 2016, 7:31 a.m. UTC | #2
On Thu, Jul 21, 2016 at 7:23 PM, David Malcolm <dmalcolm@redhat.com> wrote:
> On Thu, 2016-07-21 at 10:38 -0400, David Malcolm wrote:
>> 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&regrtesting 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.
>
> This patch survived bootstrap&regrtest, and compiles and runs OK with
> gcc-4.1, so I've committed it to trunk as r238598 (under the "obvious"
> rule).
>
> Please let me know if there are any configurations for which it still
> doesn't work.

Yes, the patch solves bootstrap problem for me.

Thanks!

Uros.
diff mbox

Patch

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);
 }