8sa1-gcc/libcpp
David Malcolm 01ada12136 C++: provide macro used-before-defined hint (PR c++/72786)
This patch uses the name_hint/deferred_diagnostic to provide
a message in the C++ frontend if a macro is used before it is defined
e.g.:

test.c:6:24: error: expected ';' at end of member declaration
   virtual void clone() const OVERRIDE { }
                        ^~~~~
                             ;
test.c:6:30: error: 'OVERRIDE' does not name a type
   virtual void clone() const OVERRIDE { }
                              ^~~~~~~~
test.c:6:30: note: the macro 'OVERRIDE' had not yet been defined
test.c:15:0: note: it was later defined here
 #define OVERRIDE override

It's possible to do it from the C++ frontend as tokenization happens
up-front (and hence the macro already exists when the above is parsed);
I attempted to do it from the C frontend, but because the C frontend only
tokenizes on-demand during parsing, the macro isn't known about until
later.

gcc/cp/ChangeLog:
	PR c++/72786
	* name-lookup.c (class macro_use_before_def): New class.
	(lookup_name_fuzzy): Detect macro that were used before being
	defined, and report them as such.

gcc/ChangeLog:
	PR c++/72786
	* spellcheck.h (best_match::blithely_get_best_candidate): New
	accessor.

gcc/testsuite/ChangeLog:
	PR c++/72786
	* g++.dg/spellcheck-macro-ordering-2.C: New test case.
	* g++.dg/spellcheck-macro-ordering.C: Add dg-message directives
	for macro used-before-defined.

libcpp/ChangeLog:
	PR c++/72786
	* include/cpplib.h (cpp_macro_definition_location): New decl.
	* macro.c (cpp_macro_definition): New function.

From-SVN: r254978
2017-11-21 00:40:53 +00:00
..
include C++: provide macro used-before-defined hint (PR c++/72786) 2017-11-21 00:40:53 +00:00
po Regenerate .pot files. 2017-08-04 23:21:23 +01:00
aclocal.m4 libcpp: Bump to automake 1.11.6 2015-05-13 11:02:17 +00:00
ChangeLog C++: provide macro used-before-defined hint (PR c++/72786) 2017-11-21 00:40:53 +00:00
ChangeLog.jit
charset.c Update copyright years. 2017-01-01 13:07:43 +01:00
config.in re PR bootstrap/72823 (r239175 causes build failure) 2016-11-16 21:10:27 +01:00
configure re PR bootstrap/72823 (r239175 causes build failure) 2016-11-16 21:10:27 +01:00
configure.ac re PR bootstrap/72823 (r239175 causes build failure) 2016-11-16 21:10:27 +01:00
directives-only.c Update copyright years. 2017-01-01 13:07:43 +01:00
directives.c diagnostics: get rid of *_at_rich_loc in favor of overloading 2017-10-31 20:21:58 +00:00
errors.c diagnostics: get rid of *_at_rich_loc in favor of overloading 2017-10-31 20:21:58 +00:00
expr.c invoke.texi: Document -std=c++17 and -std=gnu++17 and document c++1z and gnu++1z as deprecated. 2017-09-15 18:15:46 +02:00
files.c Update copyright years. 2017-01-01 13:07:43 +01:00
identifiers.c Implement __VA_OPT__ 2017-11-13 20:17:42 +00:00
init.c Implement __VA_OPT__ 2017-11-13 20:17:42 +00:00
internal.h Implement __VA_OPT__ 2017-11-13 20:17:42 +00:00
lex.c Implement __VA_OPT__ 2017-11-13 20:17:42 +00:00
line-map.c libcpp: preserve ranges within macro expansions (PR c++/79300) 2017-07-07 18:49:09 +00:00
location-example.txt Source range tracking in libcpp and C FE, with bit-packing optimization 2015-11-13 16:29:59 +00:00
macro.c C++: provide macro used-before-defined hint (PR c++/72786) 2017-11-21 00:40:53 +00:00
Makefile.in * Makefile.in (po/$(PACKAGE).pot): Adjust bug reporting URL. 2017-02-09 08:55:46 +00:00
makeucnid.c Update copyright years. 2017-01-01 13:07:43 +01:00
mkdeps.c Update copyright years. 2017-01-01 13:07:43 +01:00
pch.c Implement __VA_OPT__ 2017-11-13 20:17:42 +00:00
symtab.c Update copyright years. 2017-01-01 13:07:43 +01:00
system.h Update copyright years. 2017-01-01 13:07:43 +01:00
traditional.c Update copyright years. 2017-01-01 13:07:43 +01:00
ucnid.h Update copyright years. 2017-01-01 13:07:43 +01:00
ucnid.tab Update copyright years. 2017-01-01 13:07:43 +01:00