gcc/libcpp
Joseph Myers 701cade1a2 Enable -fextended-identifiers by default.
As proposed at <https://gcc.gnu.org/ml/gcc/2014-11/msg00014.html>,
this patch enables -fextended-identifiers by default for all standard
versions including this feature (all C++ versions, C99 and above for
C, but not C90 / C94 / gnu89 / preprocessing assembler).  It adds a
couple of tests for areas where I previously noted testsuite coverage
for extended identifiers was lacking, removes -fextended-identifiers
from existing tests, adds -g to various such tests to verify that
extended identifiers don't break debug info generation and removes the
test that was only there to verify that the feature was off by
default.

The current state of the feature may not correspond exactly to any
particular checklist from 2004/5 (see bug 9449) of what was wanted
before enabling the feature by default, but I don't think it's any
worse than plenty of other features supported by default before every
corner case is fully functional, and think problems can readily be
fixed incrementally.

The following aspects of extended identifiers could still do with more
work (and should be straightforward):

* C -aux-info (output should use UCNs).

* ObjC -gen-decls (output should use UCNs; associated diagnostics from
  the ObjC front end should use extended characters or UCNs as
  appropriate to the locale, via using %qE or identifier_to_locale).

* Use DW_AT_use_UTF8 in DWARF-3 debug info for compilation units built
  with extended identifiers enabled (or unconditionally).

* cpplib diagnostics (outputting characters or UCNs as appropriate
  depending on the locale, as done for identifiers in non-cpplib
  diagnostics).

* C++ test for UCN linking with C and extern "C".

* Check GDB support / file issues for support if needed.

* Actual UTF-8 in identifiers (?).  (Be careful about not affecting
  performance for the normal fast path of lexing identifiers, if
  possible.)

The following may be trickier:

* cpplib spelling preservation (required to diagnose macro
  redefinition with different spellings of the same identifier in the
  definition or argument names; different spellings of the name of the
  macro itself are OK, however; also required for correct handling of
  multiple stringizing in C++); correct output for -d (UCNs), DWARF
  debug info for macros (UCNs), PCH and PCH tests.  (Spelling
  preservation is the issue that needs fixing to remove references to
  corner cases in the documentation of -std=c99 and -std=c11 and in
  c99status.html.)  The idea would be to add a second pointer to
  cpp_identifier that stores the original spelling (whether for
  extended identifiers only, or for all identifiers); this does not
  enlarge cpp_token because the resulting larger cpp_identifier
  structure is no bigger than cpp_string.

* C++ translation of extended characters (including $@` and various
  control characters) to UCNs in phase 1 (note diagnostics thus
  needed, but not for C++11, for control characters in strings /
  character constants as those UCNs invalid); a likely implementation
  approach is to do translation when identifiers / strings / character
  constants are lexed, together with errors for stray $@` / control
  characters in program as not being valid UCNs in identifiers ($ only
  if not accepted in identifiers); note that this translation should
  not take place inside raw string literals.

Bootstrapped with no regressions on x86_64-unknown-linux-gnu.

libcpp:
	PR preprocessor/9449
	* init.c (lang_defaults): Enable extended identifiers for C++ and
	C99-based standards.

gcc:
	PR preprocessor/9449
	* doc/cpp.texi (Character sets, Tokenization)
	(Implementation-defined behavior): Don't refer to UCNs in
	identifiers requiring -fextended-identifiers.
	* doc/cppopts.texi (-fextended-identifiers): Document as enabled
	by default for C99 and later and C++.
	* doc/invoke.texi (-std=c99, -std=c11): Don't refer to extended
	identifiers needing -fextended-identifiers.

gcc/testsuite:
	PR preprocessor/9449
	* lib/target-supports.exp (check_effective_target_ucn_nocache):
	Don't use -fextended-identifiers.
	* c-c++-common/cpp/normalize-3.c, c-c++-common/cpp/ucnid-2011-1.c,
	g++.dg/cpp/ucn-1.C, g++.dg/cpp/ucnid-1.C, g++.dg/other/ucnid-1.C,
	gcc.dg/cpp/normalize-1.c, gcc.dg/cpp/normalize-2.c,
	gcc.dg/cpp/normalize-4.c: Don't use -fextended-identifiers.
	* gcc.dg/cpp/ucnid-1.c: Don't use -fextended-identifiers.  Use
	-g3.
	* gcc.dg/cpp/ucnid-10.c, gcc.dg/cpp/ucnid-2.c,
	gcc.dg/cpp/ucnid-3.c, gcc.dg/cpp/ucnid-4.c, gcc.dg/cpp/ucnid-5.c,
	gcc.dg/cpp/ucnid-7.c, gcc.dg/cpp/ucnid-9.c,
	gcc.dg/cpp/warn-normalized-1.c, gcc.dg/cpp/warn-normalized-2.c,
	gcc.dg/cpp/warn-normalized-3.c: Don't use -fextended-identifiers.
	* gcc.dg/ucnid-1.c, gcc.dg/ucnid-2.c, gcc.dg/ucnid-3.c,
	gcc.dg/ucnid-4.c, gcc.dg/ucnid-5.c, gcc.dg/ucnid-6.c: Don't use
	-fextended-identifiers.  Use -g.
	* gcc.dg/ucnid-7.c, gcc.dg/ucnid-8.c: Don't use
	-fextended-identifiers.
	* gcc.dg/ucnid-9.c: Don't use -fextended-identifiers.  Use -g.
	* gcc.dg/ucnid-10.c: Don't use -fextended-identifiers.
	* gcc.dg/ucnid-11.c, gcc.dg/ucnid-12.c: Don't use
	-fextended-identifiers.  Use -g.
	* gcc.dg/ucnid-13.c: Don't use -fextended-identifiers.
	* gcc.dg/cpp/ucnid-8.c: Remove test.
	* gcc.dg/cpp/ucnid-10.c, gcc.dg/ucnid-14.c: New tests.

From-SVN: r217144
2014-11-05 16:19:10 +00:00
..
include line-map.h (linemap_location_from_macro_expansion_p): const struct line_maps * argument. 2014-10-14 14:45:36 +00:00
po * de.po: Update. 2014-03-18 16:04:06 +00:00
ChangeLog Enable -fextended-identifiers by default. 2014-11-05 16:19:10 +00:00
Makefile.in Update copyright years in libcpp/ 2014-01-02 22:24:45 +00:00
aclocal.m4 Undo inadvertent commit in rev 160105. 2010-06-01 10:20:24 -04:00
charset.c charset.c (convert_no_conversion): Reallocate memory with 25% headroom. 2014-10-02 00:06:28 +00:00
config.in configure.ac: Remove long long and __int64 type checks... 2014-05-26 08:19:02 +00:00
configure configure.ac: Remove long long and __int64 type checks... 2014-05-26 08:19:02 +00:00
configure.ac configure.ac: Remove long long and __int64 type checks... 2014-05-26 08:19:02 +00:00
directives-only.c Update copyright years in libcpp/ 2014-01-02 22:24:45 +00:00
directives.c Implement SD-6: SG10 Feature Test Recommendations 2014-10-01 11:49:23 +00:00
errors.c re PR preprocessor/58893 (<command-line>:0:0: internal compiler error: Segmentation fault) 2014-09-30 16:08:53 +00:00
expr.c Implement SD-6: SG10 Feature Test Recommendations 2014-10-01 11:49:23 +00:00
files.c gengtype.h (obstack_chunk_alloc, [...]): Remove cast. 2014-10-22 12:11:31 +10:30
identifiers.c gengtype.h (obstack_chunk_alloc, [...]): Remove cast. 2014-10-22 12:11:31 +10:30
init.c Enable -fextended-identifiers by default. 2014-11-05 16:19:10 +00:00
internal.h Implement SD-6: SG10 Feature Test Recommendations 2014-10-01 11:49:23 +00:00
lex.c lex.c (search_line_fast): Add new version to be used for Power8 and later targets when Altivec is enabled. 2014-10-03 20:06:38 +00:00
line-map.c line-map.h (linemap_location_from_macro_expansion_p): const struct line_maps * argument. 2014-10-14 14:45:36 +00:00
macro.c options.texi: Document that Var and Init are required if CPP is given. 2014-09-04 15:13:40 +00:00
makeucnid.c Update copyright years in libcpp/ 2014-01-02 22:24:45 +00:00
mkdeps.c Update copyright years in libcpp/ 2014-01-02 22:24:45 +00:00
pch.c Implement SD-6: SG10 Feature Test Recommendations 2014-10-01 11:49:23 +00:00
symtab.c gengtype.h (obstack_chunk_alloc, [...]): Remove cast. 2014-10-22 12:11:31 +10:30
system.h Update copyright years in libcpp/ 2014-01-02 22:24:45 +00:00
traditional.c Implement SD-6: SG10 Feature Test Recommendations 2014-10-01 11:49:23 +00:00
ucnid.h Update copyright years in libcpp/ 2014-01-02 22:24:45 +00:00
ucnid.tab Update copyright years in libcpp/ 2014-01-02 22:24:45 +00:00