Skip to content
Snippets Groups Projects
  1. Sep 12, 2024
    • Jason Merrill's avatar
      libcpp: adjust pedwarn handling · c5009eb8
      Jason Merrill authored
      Using cpp_pedwarning (CPP_W_PEDANTIC instead of if (CPP_PEDANTIC cpp_error
      lets users suppress these diagnostics with
       #pragma GCC diagnostic ignored "-Wpedantic".
      
      This patch changes all instances of the cpp_error (CPP_DL_PEDWARN to
      cpp_pedwarning.  In cases where the extension appears in a later C++
      revision, we now condition the warning on the relevant -Wc++??-extensions
      flag instead of -Wpedantic; in such cases often the if (CPP_PEDANTIC) check
      is retained to preserve the default non-warning behavior.
      
      I didn't attempt to adjust the warning flags for the C compiler, since it
      seems to follow a different system than C++.
      
      The CPP_PEDANTIC check is also kept in _cpp_lex_direct to avoid an ICE in
      the self-tests from cb.diagnostics not being initialized.
      
      While working on testcases for these changes I noticed that the c-c++-common
      tests are not run with -pedantic-errors by default like the gcc.dg and
      g++.dg directories are.  And if I specify -pedantic-errors with dg-options,
      the default -std= changes from c++?? to gnu++??, which interferes with some
      other pedwarns.  So two of the tests are C++-only.
      
      libcpp/ChangeLog:
      
      	* include/cpplib.h (enum cpp_warning_reason): Add
      	CPP_W_CXX{14,17,20,23}_EXTENSIONS.
      	* charset.cc (_cpp_valid_ucn, convert_hex, convert_oct)
      	(convert_escape, narrow_str_to_charconst): Use cpp_pedwarning
      	instead of cpp_error for pedwarns.
      	* directives.cc (directive_diagnostics, _cpp_handle_directive)
      	(do_line, do_elif): Likewise.
      	* expr.cc (cpp_classify_number, eval_token): Likewise.
      	* lex.cc (skip_whitespace, maybe_va_opt_error)
      	(_cpp_lex_direct): Likewise.
      	* macro.cc (_cpp_arguments_ok): Likewise.
      	(replace_args): Use -Wvariadic-macros for pedwarn about
      	empty macro arguments.
      
      gcc/c-family/ChangeLog:
      
      	* c.opt: Add CppReason for Wc++{14,17,20,23}-extensions.
      	* c-pragma.cc (handle_pragma_diagnostic_impl): Don't check
      	OPT_Wc__23_extensions.
      
      gcc/testsuite/ChangeLog:
      
      	* c-c++-common/pragma-diag-17.c: New test.
      	* g++.dg/cpp0x/va-opt1.C: New test.
      	* g++.dg/cpp23/named-universal-char-escape3.C: New test.
      c5009eb8
    • Jakub Jelinek's avatar
      libcpp, c-family: Add (dumb) C23 N3017 #embed support [PR105863] · eba6d2aa
      Jakub Jelinek authored
      The following patch implements the C23 N3017 "#embed - a scannable,
      tooling-friendly binary resource inclusion mechanism" paper.
      
      The implementation is intentionally dumb, in that it doesn't significantly
      speed up compilation of larger initializers and doesn't make it possible
      to use huge #embeds (like several gigabytes large, that is compile time
      and memory still infeasible).
      There are 2 reasons for this.  One is that I think like it is implemented
      now in the patch is how we should use it for the smaller #embed sizes,
      dunno with which boundary, whether 32 bytes or 64 or something like that,
      certainly handling the single byte cases which is something that can appear
      anywhere in the source where constant integer literal can appear is
      desirable and I think for a few bytes it isn't worth it to come up with
      something smarter and users would like to e.g. see it in -E readably as
      well (perhaps the slow vs. fast boundary should be determined by command
      line option).  And the other one is to be able to more easily find
      regressions in behavior caused by the optimizations, so we have something
      to get back in git to compare against.
      I'm definitely willing to work on the optimizations (likely introduce a new
      CPP_* token type to refer to a range of libcpp owned memory (start + size)
      and similarly some tree which can do the same, and can be at any time e.g.
      split into 2 subparts + say INTEGER_CST in between if needed say for
      const unsigned char d[] = {
       #embed "2GB.dat" prefix (0, 0, ) suffix (, [0x40000000] = 42)
      }; still without having to copy around huge amounts of data; STRING_CST
      owns the memory it points to and can be only 2GB in size), but would
      like to do that incrementally.
      And would like to first include some extensions also not included in
      this patch, like gnu::offset (off) parameter to allow to skip certain
      constant amount of bytes at the start of the files, plus
      gnu::base64 ("base64_encoded_data") parameter to add something which can
      store more efficiently large amounts of the #embed data in preprocessed
      source.
      
      I've been cross-checking all the tests also against the LLVM implementation
      https://github.com/llvm/llvm-project/pull/68620
      which has been for a few hours even committed to LLVM trunk but reverted
      afterwards.  LLVM now has the support committed and I admit I haven't
      rechecked whether the behavior on the below mentioned spots have been fixed
      in it already or not yet.
      
      The patch uses --embed-dir= option that clang plans to add above and doesn't
      use other variants on the search directories yet, plus there are no
      default directories at least for the time being where to search for embed
      files.  So, #embed "..." works if it is found in the same directory (or
      relative to the current file's directory) and #embed "/..." or #embed </...>
      work always, but relative #embed <...> doesn't unless at least one
      --embed-dir= is specified.  There is no reason to differentiate between
      system and non-system directories, so we don't need -isystem like
      counterpart, perhaps -iquote like counterpart could be useful in the future,
      dunno what else.  It has --embed-directory=dir and --embed-directory dir
      as aliases.
      
      There are some differences beyond clang ICEs, so I'd like to point them out
      to make sure there is agreement on the choices in the patch.  They are also
      mentioned in the comments of the llvm pull request.
      
      The most important is that the GCC patch (as well as the original thephd.dev
      LLVM branch on godbolt) expands #embed (or acts as if it is expanded) into
      a mere sequence of numbers like 123,2,35,26 rather then what clang
      effectively treats as (unsigned char)123,(unsigned char)2,(unsigned
      char)35,(unsigned char)26 but only does that when using integrated
      preprocessor, not when using -save-temps where it acts as GCC.
      JeanHeyd as the original author agrees that is how it is currently worded in
      C23.
      
      Another difference (not tested in the testsuite, not sure how to check for
      effective target /dev/urandom nor am sure it is desirable to check that
      during testsuite) is how to treat character devices, named pipes etc.
      (block devices are errored on).  The original paper uses /dev/urandom
      in various examples and seems to assume that unlike regular files the
      devices aren't really cached, so
       #embed </dev/urandom> limit(1) prefix(int a = ) suffix(;)
       #embed </dev/urandom> limit(1) prefix(int b = ) suffix(;)
      usually results in a != b.  That is what the godbolt thephd.dev branch
      implements too and what this patch does as well, but clang actually seems
      to just go from st.st_size == 0, ergo it must be zero-sized resource and
      so just copies over if_empty if present.  It is really questionable
      what to do about the character devices/named pipes with __has_embed, for
      regular files the patch doesn't read anything from them, relies on
      st.st_size + limit for whether it is empty or non-empty.  But I don't know
      of a way to check if read on say a character device would read anything
      or not (the </dev/null> limit (1) vs. </dev/zero> limit (1) cases), and
      if we read something, that would be better cached for later because
       #embed later if it reads again could read no further data even when it
      first read something.  So, the patch currently for __has_embed just
      always returns 2 on the non-regular files, like the thephd.dev
      branch does as well and like the clang pull request as well.
      A question is also what to do for gnu::offset on the non-regular files
      even for #embed, those aren't seekable and do we want to just read and throw
      away the offset bytes each time we see it used?
      
      clang also chokes on the
       #if __has_embed (__FILE__ __limit__ (1) __prefix__ () suffix (1 / 0) \
       __if_empty__ ((({{[0[0{0{0(0(0)1)1}1}]]}})))) != __STDC_EMBED_FOUND__
       #error "__has_embed fail"
       #endif
      in embed-1.c, but thephd.dev branch accepts it and I don't see why
      it shouldn't, (({{[0[0{0{0(0(0)1)1}1}]]}}))) is a balanced token
      sequence and the file isn't empty, so it should just be parsed and
      discarded.
      
      clang also IMHO mishandles
       const unsigned char w[] = {
       #embed __FILE__ prefix([0] = 42, [15] =) limit(32)
       };
      but again only without -save-temps, seems like it
      treats it as
      [0] = 42, [15] = (99,111,110,115,116,32,117,110,115,105,103,110,101,100,
      32,99,104,97,114,32,119,91,93,32,61,32,123,10,35,101,109,98)
      rather than
      [0] = 42, [15] = 99,111,110,115,116,32,117,110,115,105,103,110,101,100,
      32,99,104,97,114,32,119,91,93,32,61,32,123,10,35,101,109,98
      and warns on it for -Wunused-value and just compiles it as
      [0] = 42, [15] = 98
      
      And also
       void foo (int, int, int, int);
       void bar (void) { foo (
       #embed __FILE__ limit (4) prefix (172 + ) suffix (+ 2)
       ); }
      is treated as
      172 + (118, 111, 105, 100) + 2
      rather than
      172 + 118, 111, 105, 100 + 2
      which clang -save-temps or GCC treats it like, so results
      in just one argument passed rather than 4.
      
      if (!strstr ((const char *) magna_carta, "imprisonétur")) abort ();
      in the testcase fails as well, but in that case calling it in gdb succeeds:
      p ((char *(*)(char *, char *))__strstr_sse2) (magna_carta, "imprisonétur")
      $2 = 0x555555558d3c <magna_carta+11564> "imprisonétur aut disseisiátur"...
      so I guess they are just trying to constant evaluate strstr and do it
      incorrectly.
      
      They started with making the optimizations together in the initial patch
      set, so they don't have the luxury to compare if it is just because of
      the optimization they are trying to do or because that is how the
      feature works for them.  At least unless they use -save-temps for now.
      
      There is also different behavior between clang and gcc on -M or other
      dependency generating options.  Seems clang includes the __has_embed
      searched files in dependencies, while my patch doesn't.  But so does
      clang for __has_include and GCC doesn't.  Emitting a hard dependency
      on some header just because there was __has_include/__has_embed for it
      seems wrong to me, because (at least when properly written) the source
      likely doesn't mind if the file is missing, it will do something else,
      so a hard error from make because of it doesn't seem right.  Does
      make have some weaker dependencies, such that if some file can be remade
      it is but if it doesn't exist, it isn't fatal?
      
      I wonder whether #embed <non-existent-file> really needs to be fatal
      or whether we could simply after diagnosing it pretend the file exists
      and is empty.  For #include I think fatal errors make tons of sense,
      but perhaps for #embed which is more localized we'd get better error
      reporting if we didn't bail out immediately.  Note, both GCC and clang
      currently treat those as fatal errors.
      
      clang also added -dE option which with -E instead of preprocessing
      the #embed directives keeps them as is, but the preprocessed source
      then isn't self-contained.  That option looks more harmful than useful to
      me.
      
      Also, it isn't clear to me from C23 whether it is possible to have
      __has_include/__has_c_attribute/__has_embed expressions inside of
      the limit #embed/__has_embed argument.
      6.10.3.2/2 says that defined should not appear there (and the patch
      diagnoses it and testsuite tests), but for __has_include/__has_embed
      etc. 6.10.1/11 says:
      "The identifiers __has_include, __has_embed, and __has_c_attribute
      shall not appear in any context not mentioned in this subclause."
      If that subclause in that case means 6.10.1, then it presumably shouldn't
      appear in #embed in 6.10.3, but __has_embed is in 6.10.1...
      But 6.10.3.2/3 says that it should be parsed according to the 6.10.1
      rules.  Haven't included tests like
       #if __has_embed (__FILE__ limit (__has_embed (__FILE__ limit (1))))
      or
       #embed __FILE__ limit (__has_include (__FILE__))
      into the testsuite because of the doubts but I think the patch should
      handle those right now.
      
      The reason I've used Magna Carta text in some of the testcases is that
      I hope it shouldn't be copyrighted after the centuries and I'd strongly
      prefer not to have binary blobs in git after the xz backdoor lesson
      and wanted something larger which doesn't change all the time.
      
      Oh, BTW, I see in C23 draft 6.10.3.2 in Example 4
      if (f_source == NULL);
        return 1;
      (note the spurious semicolon after closing paren), has that been fixed
      already?
      
      Like the thephd.dev and clang implementations, the patch always macro
      expands the whole #embed and __has_embed directives except for the
      embed keyword.  That is most likely not what C23 says, my limited
      understanding right now is that in #embed one needs to parse the whole
      directive line with macro expansion disabled and check if it satisfies the
      grammar, if not, the whole directive is macro expanded, if yes, only
      the limit parameter argument is macro expanded and the prefix/suffix/if_empty
      arguments are maybe macro expanded when actually used (and not at all if
      unused).  And I think __has_embed macro expansion has conflicting rules.
      
      2024-09-12  Jakub Jelinek  <jakub@redhat.com>
      
      	PR c/105863
      libcpp/
      	* include/cpplib.h: Implement C23 N3017 #embed - a scannable,
      	tooling-friendly binary resource inclusion mechanism paper.
      	(struct cpp_options): Add embed member.
      	(enum cpp_builtin_type): Add BT_HAS_EMBED.
      	(cpp_set_include_chains): Add another cpp_dir * argument to
      	the declaration.
      	* internal.h (enum include_type): Add IT_EMBED.
      	(struct cpp_reader): Add embed_include member.
      	(struct cpp_embed_params_tokens): New type.
      	(struct cpp_embed_params): New type.
      	(_cpp_get_token_no_padding): Declare.
      	(enum _cpp_find_file_kind): Add _cpp_FFK_EMBED and _cpp_FFK_HAS_EMBED.
      	(_cpp_stack_embed): Declare.
      	(_cpp_parse_expr): Change return type to cpp_num_part instead of
      	bool, change second argument from bool to const char * and add third
      	argument.
      	(_cpp_parse_embed_params): Declare.
      	* directives.cc (DIRECTIVE_TABLE): Add embed entry.
      	(end_directive): Don't call skip_rest_of_line for T_EMBED directive.
      	(_cpp_handle_directive): Return 2 rather than 1 for T_EMBED in
      	directives-only mode.
      	(parse_include): Don't Call check_eol for T_EMBED directive.
      	(skip_balanced_token_seq): New function.
      	(EMBED_PARAMS): Define.
      	(enum embed_param_kind): New type.
      	(embed_params): New variable.
      	(_cpp_parse_embed_params): New function.
      	(do_embed): New function.
      	(do_if): Adjust _cpp_parse_expr caller.
      	(do_elif): Likewise.
      	* expr.cc (parse_defined): Diagnose defined in #embed or __has_embed
      	parameters.
      	(_cpp_parse_expr): Change return type to cpp_num_part instead of
      	bool, change second argument from bool to const char * and add third
      	argument.  Adjust function comment.  For #embed/__has_embed parameters
      	add an artificial CPP_OPEN_PAREN.  Use the second argument DIR
      	directly instead of string literals conditional on IS_IF.
      	For #embed/__has_embed parameter, stop on reaching CPP_CLOSE_PAREN
      	matching the artificial one.  Diagnose negative or too large embed
      	parameter operands.
      	(num_binary_op): Use #embed instead of #if for diagnostics if inside
      	#embed/__has_embed parameter.
      	(num_div_op): Likewise.
      	* files.cc (struct _cpp_file): Add limit member and embed bitfield.
      	(search_cache): Add IS_EMBED argument, formatting fix.  Skip over
      	files with different file->embed from the argument.
      	(find_file_in_dir): Don't call pch_open_file if file->embed.
      	(_cpp_find_file): Handle _cpp_FFK_EMBED and _cpp_FFK_HAS_EMBED.
      	(read_file_guts): Formatting fix.
      	(has_unique_contents): Ignore file->embed files.
      	(search_path_head): Handle IT_EMBED type.
      	(_cpp_stack_embed): New function.
      	(_cpp_get_file_stat): Formatting fix.
      	(cpp_set_include_chains): Add embed argument, save it to
      	pfile->embed_include and compute lens for the chain.
      	* init.cc (struct lang_flags): Add embed member.
      	(lang_defaults): Add embed initializers.
      	(cpp_set_lang): Initialize CPP_OPTION (pfile, embed).
      	(builtin_array): Add __has_embed entry.
      	(cpp_init_builtins): Predefine __STDC_EMBED_NOT_FOUND__,
      	__STDC_EMBED_FOUND__ and __STDC_EMBED_EMPTY__.
      	* lex.cc (cpp_directive_only_process): Handle #embed.
      	* macro.cc (cpp_get_token_no_padding): Rename to ...
      	(_cpp_get_token_no_padding): ... this.  No longer static.
      	(builtin_has_include_1): New function.
      	(builtin_has_include): Use it.  Use _cpp_get_token_no_padding
      	instead of cpp_get_token_no_padding.
      	(builtin_has_embed): New function.
      	(_cpp_builtin_macro_text): Handle BT_HAS_EMBED.
      gcc/
      	* doc/cppdiropts.texi (--embed-dir=): Document.
      	* doc/cpp.texi (Binary Resource Inclusion): New chapter.
      	(__has_embed): Document.
      	* doc/invoke.texi (Directory Options): Mention --embed-dir=.
      	* gcc.cc (cpp_unique_options): Add %{-embed*}.
      	* genmatch.cc (main): Adjust cpp_set_include_chains caller.
      	* incpath.h (enum incpath_kind): Add INC_EMBED.
      	* incpath.cc (merge_include_chains): Handle INC_EMBED.
      	(register_include_chains): Adjust cpp_set_include_chains caller.
      gcc/c-family/
      	* c.opt (-embed-dir=): New option.
      	(-embed-directory): New alias.
      	(-embed-directory=): New alias.
      	* c-opts.cc (c_common_handle_option): Handle OPT__embed_dir_.
      gcc/testsuite/
      	* c-c++-common/cpp/embed-1.c: New test.
      	* c-c++-common/cpp/embed-2.c: New test.
      	* c-c++-common/cpp/embed-3.c: New test.
      	* c-c++-common/cpp/embed-4.c: New test.
      	* c-c++-common/cpp/embed-5.c: New test.
      	* c-c++-common/cpp/embed-6.c: New test.
      	* c-c++-common/cpp/embed-7.c: New test.
      	* c-c++-common/cpp/embed-8.c: New test.
      	* c-c++-common/cpp/embed-9.c: New test.
      	* c-c++-common/cpp/embed-10.c: New test.
      	* c-c++-common/cpp/embed-11.c: New test.
      	* c-c++-common/cpp/embed-12.c: New test.
      	* c-c++-common/cpp/embed-13.c: New test.
      	* c-c++-common/cpp/embed-14.c: New test.
      	* c-c++-common/cpp/embed-25.c: New test.
      	* c-c++-common/cpp/embed-26.c: New test.
      	* c-c++-common/cpp/embed-dir/embed-1.inc: New test.
      	* c-c++-common/cpp/embed-dir/embed-3.c: New test.
      	* c-c++-common/cpp/embed-dir/embed-4.c: New test.
      	* c-c++-common/cpp/embed-dir/magna-carta.txt: New test.
      	* gcc.dg/cpp/embed-1.c: New test.
      	* gcc.dg/cpp/embed-2.c: New test.
      	* gcc.dg/cpp/embed-3.c: New test.
      	* gcc.dg/cpp/embed-4.c: New test.
      	* g++.dg/cpp/embed-1.C: New test.
      	* g++.dg/cpp/embed-2.C: New test.
      	* g++.dg/cpp/embed-3.C: New test.
      eba6d2aa
  2. Jan 03, 2024
  3. Nov 28, 2023
    • Lewis Hyatt's avatar
      libcpp: Fix unsigned promotion for unevaluated divide by zero [PR112701] · ce52f1f7
      Lewis Hyatt authored
      When libcpp encounters a divide by zero while processing a constant
      expression "x/y", it returns "x" as a fallback. The value of the fallback is
      not normally important, since an error will be generated anyway, but if the
      expression appears in an unevaluated context, such as "0 ? 0/0u : -1", then
      there will be no error, and the fallback value will be meaningful to the
      extent that it may cause promotion from signed to unsigned of an operand
      encountered later. As the PR notes, libcpp does not do the unsigned
      promotion correctly in this case; fix it by making the fallback return value
      unsigned as necessary.
      
      libcpp/ChangeLog:
      
      	PR preprocessor/112701
      	* expr.cc (num_div_op): Set unsignedp appropriately when returning a
      	stub value for divide by 0.
      
      gcc/testsuite/ChangeLog:
      
      	PR preprocessor/112701
      	* gcc.dg/cpp/expr.c: Add additional tests to cover divide by 0 in an
      	unevaluated context, where the unsignedness still matters.
      ce52f1f7
  4. Nov 07, 2023
    • Joseph Myers's avatar
      c: Refer more consistently to C23 not C2X · 094a609c
      Joseph Myers authored
      Continuing the move to refer to C23 in place of C2X throughout the
      source tree, update documentation, diagnostics, comments, variable and
      function names, etc., to use the C23 name.
      
      Testsuite updates are left for a future patch, except for testcases
      that test diagnostics that previously mentioned C2X (but in those
      testcases, sometimes other comments are updated, not just the
      diagnostic expectations).
      
      Bootstrapped with no regressions for x86_64-pc-linux-gnu.
      
      gcc/
      	* builtins.def (DEF_C2X_BUILTIN): Rename to DEF_C23_BUILTIN and
      	use flag_isoc23 and function_c23_misc.
      	* config/rl78/rl78.cc (rl78_option_override): Compare
      	lang_hooks.name with "GNU C23" not "GNU C2X".
      	* coretypes.h (function_c2x_misc): Rename to function_c23_misc.
      	* doc/cpp.texi (@code{__has_attribute}): Refer to C23 instead of
      	C2x.
      	* doc/extend.texi: Likewise.
      	* doc/invoke.texi: Likewise.
      	* dwarf2out.cc (highest_c_language, gen_compile_unit_die): Compare
      	against and return "GNU C23" language string instead of "GNU C2X".
      	* ginclude/float.h: Refer to C23 instead of C2X in comments.
      	* ginclude/stdint-gcc.h: Likewise.
      	* glimits.h: Likewise.
      	* tree.h: Likewise.
      
      gcc/ada/
      	* gcc-interface/utils.cc (flag_isoc2x): Rename to flag_isoc23.
      
      gcc/c-family/
      	* c-common.cc (flag_isoc2x): Rename to flag_isoc23.
      	(c_common_reswords): Use D_C23 instead of D_C2X.
      	* c-common.h: Refer throughout to C23 instead of C2X in comments.
      	(D_C2X): Rename to D_C23.
      	(flag_isoc2x): Rename to flag_isoc23.
      	* c-cppbuiltin.cc (builtin_define_float_constants): Use
      	flag_isoc23 instead of flag_isoc2x.  Refer to C23 instead of C2x
      	in comments.
      	* c-format.cc: Use STD_C23 instead of STD_C2X and flag_isoc23
      	instead of flag_isoc2x.  Refer to C23 instead of C2X in comments.
      	* c-format.h: Use STD_C23 instead of STD_C2X.
      	* c-lex.cc: Use warn_c11_c23_compat instead of warn_c11_c2x_compat
      	and flag_isoc23 instead of flag_isoc2x.  Refer to C23 instead of
      	C2X in diagnostics.
      	* c-opts.cc: Use flag_isoc23 instead of flag_isoc2x.  Refer to C23
      	instead of C2X in comments.
      	(set_std_c2x): Rename to set_std_c23.
      	* c.opt (Wc11-c23-compat): Use CPP(cpp_warn_c11_c23_compat)
      	CppReason(CPP_W_C11_C23_COMPAT) Var(warn_c11_c23_compat) instead
      	of CPP(cpp_warn_c11_c2x_compat) CppReason(CPP_W_C11_C2X_COMPAT)
      	Var(warn_c11_c2x_compat).
      
      gcc/c/
      	* c-decl.cc: Use flag_isoc23 instead of flag_isoc2x and c23_auto_p
      	instead of c2x_auto_p.  Refer to C23 instead of C2X in diagnostics
      	and comments.
      	* c-errors.cc: Use flag_isoc23 instead of flag_isoc2x and
      	warn_c11_c23_compat instead of warn_c11_c2x_compat.  Refer to C23
      	instead of C2X in comments.
      	* c-parser.cc: Use flag_isoc23 instead of flag_isoc2x,
      	warn_c11_c23_compat instead of warn_c11_c2x_compat, c23_auto_p
      	instead of c2x_auto_p and D_C23 instead of D_C2X.  Refer to C23
      	instead of C2X in diagnostics and comments.
      	* c-tree.h: Refer to C23 instead of C2X in comments.
      	(struct c_declspecs): Rename c2x_auto_p to c23_auto_p.
      	* c-typeck.cc: Use flag_isoc23 instead of flag_isoc2x and
      	warn_c11_c23_compat instead of warn_c11_c2x_compat.  Refer to C23
      	instead of C2X in diagnostics and comments.
      
      gcc/fortran/
      	* gfortran.h (gfc_real_info): Refer to C23 instead of C2X in
      	comment.
      
      gcc/lto/
      	* lto-lang.cc (flag_isoc2x): Rename to flag_isoc23.
      
      gcc/testsuite/
      	* gcc.dg/binary-constants-2.c: Refer to C23 instead of C2X.
      	* gcc.dg/binary-constants-3.c: Likewise.
      	* gcc.dg/bitint-23.c: Likewise.
      	* gcc.dg/bitint-26.c: Likewise.
      	* gcc.dg/bitint-27.c: Likewise.
      	* gcc.dg/c11-attr-syntax-1.c: Likewise.
      	* gcc.dg/c11-attr-syntax-2.c: Likewise.
      	* gcc.dg/c11-floatn-1.c: Likewise.
      	* gcc.dg/c11-floatn-2.c: Likewise.
      	* gcc.dg/c11-floatn-3.c: Likewise.
      	* gcc.dg/c11-floatn-4.c: Likewise.
      	* gcc.dg/c11-floatn-5.c: Likewise.
      	* gcc.dg/c11-floatn-6.c: Likewise.
      	* gcc.dg/c11-floatn-7.c: Likewise.
      	* gcc.dg/c11-floatn-8.c: Likewise.
      	* gcc.dg/c2x-attr-syntax-4.c: Likewise.
      	* gcc.dg/c2x-attr-syntax-6.c: Likewise.
      	* gcc.dg/c2x-attr-syntax-7.c: Likewise.
      	* gcc.dg/c2x-binary-constants-2.c: Likewise.
      	* gcc.dg/c2x-floatn-5.c: Likewise.
      	* gcc.dg/c2x-floatn-6.c: Likewise.
      	* gcc.dg/c2x-floatn-7.c: Likewise.
      	* gcc.dg/c2x-floatn-8.c: Likewise.
      	* gcc.dg/c2x-nullptr-4.c: Likewise.
      	* gcc.dg/c2x-qual-2.c: Likewise.
      	* gcc.dg/c2x-qual-3.c: Likewise.
      	* gcc.dg/c2x-qual-6.c: Likewise.
      	* gcc.dg/cpp/c11-warning-1.c: Likewise.
      	* gcc.dg/cpp/c11-warning-2.c: Likewise.
      	* gcc.dg/cpp/c11-warning-3.c: Likewise.
      	* gcc.dg/cpp/c2x-warning-2.c: Likewise.
      	* gcc.dg/cpp/gnu11-elifdef-3.c: Likewise.
      	* gcc.dg/cpp/gnu11-elifdef-4.c: Likewise.
      	* gcc.dg/cpp/gnu11-warning-1.c: Likewise.
      	* gcc.dg/cpp/gnu11-warning-2.c: Likewise.
      	* gcc.dg/cpp/gnu11-warning-3.c: Likewise.
      	* gcc.dg/cpp/gnu2x-warning-2.c: Likewise.
      	* gcc.dg/dfp/c11-constants-1.c: Likewise.
      	* gcc.dg/dfp/c11-constants-2.c: Likewise.
      	* gcc.dg/dfp/c2x-constants-2.c: Likewise.
      	* gcc.dg/dfp/constants-pedantic.c: Likewise.
      	* gcc.dg/pr30260.c: Likewise.
      	* gcc.dg/system-binary-constants-1.c: Likewise.
      
      libcpp/
      	* directives.cc: Refer to C23 instead of C2X in diagnostics and
      	comments.
      	(STDC2X): Rename to STDC23.
      	* expr.cc: Use cpp_warn_c11_c23_compat instead of
      	cpp_warn_c11_c2x_compat and CPP_W_C11_C23_COMPAT instead of
      	CPP_W_C11_C2X_COMPAT.  Refer to C23 instead of C2X in diagnostics
      	and comments.
      	* include/cpplib.h: Refer to C23 instead of C2X in diagnostics and
      	comments.
      	(CLK_GNUC2X): Rename to CLK_GNUC23.
      	(CLK_STDC2X): Rename to CLK_STDC23.
      	(CPP_W_C11_C2X_COMPAT): Rename to CPP_W_C11_C23_COMPAT.
      	* init.cc: Use GNUC23 instead of GNUC2X, STDC23 instead of STDC2X
      	and cpp_warn_c11_c23_compat instead of cpp_warn_c11_c2x_compat.
      	* lex.cc (maybe_va_opt_error): Refer to C23 instead of C2X in
      	diagnostic.
      	* macro.cc (_cpp_arguments_ok): Refer to C23 instead of C2X in
      	comment.
      094a609c
  5. Sep 06, 2023
    • Jakub Jelinek's avatar
      C _BitInt incremental fixes [PR102989] · f76ae436
      Jakub Jelinek authored
      On Wed, Aug 09, 2023 at 09:17:57PM +0000, Joseph Myers wrote:
      > > - _Complex _BitInt(N) isn't supported; again mainly because none of the psABIs
      > >   mention how those should be passed/returned; in a limited way they are
      > >   supported internally because the internal functions into which
      > >   __builtin_{add,sub,mul}_overflow{,_p} is lowered return COMPLEX_TYPE as a
      > >   hack to return 2 values without using references/pointers
      >
      > What happens when the usual arithmetic conversions are applied to
      > operands, one of which is a complex integer type and the other of which is
      > a wider _BitInt type?  I don't see anything in the code to disallow this
      > case (which would produce an expression with a _Complex _BitInt type), or
      > any testcases for it.
      
      I've added a sorry for that case (+ return the narrower COMPLEX_TYPE).
      Also added testcase to verify we don't create VECTOR_TYPEs of BITINT_TYPE
      even if they have mode precision and suitable size (others were rejected
      already before).
      
      > Other testcases I think should be present (along with any corresponding
      > changes needed to the code itself):
      >
      > * Verifying that the new integer constant suffix is rejected for C++.
      
      Done.
      
      > * Verifying appropriate pedwarn-if-pedantic for the new constant suffix
      > for versions of C before C2x (and probably for use of _BitInt type
      > specifiers before C2x as well) - along with the expected -Wc11-c2x-compat
      > handling (in C2x mode) / -pedantic -Wno-c11-c2x-compat in older modes.
      
      Done.
      
      Here is an incremental patch which does that.
      
      2023-09-06  Jakub Jelinek  <jakub@redhat.com>
      
      	PR c/102989
      gcc/c/
      	* c-decl.cc (finish_declspecs): Emit pedwarn_c11 on _BitInt.
      	* c-typeck.cc (c_common_type): Emit sorry for common type between
      	_Complex integer and larger _BitInt and return the _Complex integer.
      gcc/c-family/
      	* c-attribs.cc (type_valid_for_vector_size): Reject vector types
      	with BITINT_TYPE elements even if they have mode precision and
      	suitable size.
      gcc/testsuite/
      	* gcc.dg/bitint-19.c: New test.
      	* gcc.dg/bitint-20.c: New test.
      	* gcc.dg/bitint-21.c: New test.
      	* gcc.dg/bitint-22.c: New test.
      	* gcc.dg/bitint-23.c: New test.
      	* gcc.dg/bitint-24.c: New test.
      	* gcc.dg/bitint-25.c: New test.
      	* gcc.dg/bitint-26.c: New test.
      	* gcc.dg/bitint-27.c: New test.
      	* g++.dg/ext/bitint1.C: New test.
      	* g++.dg/ext/bitint2.C: New test.
      	* g++.dg/ext/bitint3.C: New test.
      	* g++.dg/ext/bitint4.C: New test.
      libcpp/
      	* expr.cc (cpp_classify_number): Diagnose wb literal suffixes
      	for -pedantic* before C2X or -Wc11-c2x-compat.
      f76ae436
    • Jakub Jelinek's avatar
      C _BitInt support [PR102989] · 8c984a1c
      Jakub Jelinek authored
      This patch adds the C FE support, c-family support, small libcpp change
      so that 123wb and 42uwb suffixes are handled plus glimits.h change
      to define BITINT_MAXWIDTH macro.
      
      The previous patches really do nothing without this, which enables
      all the support.
      
      2023-09-06  Jakub Jelinek  <jakub@redhat.com>
      
      	PR c/102989
      gcc/
      	* glimits.h (BITINT_MAXWIDTH): Define if __BITINT_MAXWIDTH__ is
      	predefined.
      gcc/c-family/
      	* c-common.cc (c_common_reswords): Add _BitInt as keyword.
      	(unsafe_conversion_p): Handle BITINT_TYPE like INTEGER_TYPE.
      	(c_common_signed_or_unsigned_type): Handle BITINT_TYPE.
      	(c_common_truthvalue_conversion, c_common_get_alias_set,
      	check_builtin_function_arguments): Handle BITINT_TYPE like
      	INTEGER_TYPE.
      	(sync_resolve_size): Add ORIG_FORMAT argument.  If
      	FETCH && !ORIG_FORMAT, type is BITINT_TYPE, return -1 if size isn't
      	one of 1, 2, 4, 8 or 16 or if it is 16 but TImode is not supported.
      	(atomic_bitint_fetch_using_cas_loop): New function.
      	(resolve_overloaded_builtin): Adjust sync_resolve_size caller.  If
      	-1 is returned, use atomic_bitint_fetch_using_cas_loop to lower it.
      	Formatting fix.
      	(keyword_begins_type_specifier): Handle RID_BITINT.
      	* c-common.h (enum rid): Add RID_BITINT enumerator.
      	* c-cppbuiltin.cc (c_cpp_builtins): For C call
      	targetm.c.bitint_type_info and predefine __BITINT_MAXWIDTH__
      	and for -fbuilding-libgcc also __LIBGCC_BITINT_LIMB_WIDTH__ and
      	__LIBGCC_BITINT_ORDER__ macros if _BitInt is supported.
      	* c-lex.cc (interpret_integer): Handle CPP_N_BITINT.
      	* c-pretty-print.cc (c_pretty_printer::simple_type_specifier,
      	c_pretty_printer::direct_abstract_declarator,
      	c_pretty_printer::direct_declarator, c_pretty_printer::declarator):
      	Handle BITINT_TYPE.
      	(pp_c_integer_constant): Handle printing of large precision wide_ints
      	which would buffer overflow digit_buffer.
      	* c-warn.cc (conversion_warning, warnings_for_convert_and_check,
      	warnings_for_convert_and_check): Handle BITINT_TYPE like
      	INTEGER_TYPE.
      gcc/c/
      	* c-convert.cc (c_convert): Handle BITINT_TYPE like INTEGER_TYPE.
      	* c-decl.cc (check_bitfield_type_and_width): Allow BITINT_TYPE
      	bit-fields.
      	(finish_struct): Prefer to use BITINT_TYPE for BITINT_TYPE bit-fields
      	if possible.
      	(declspecs_add_type): Formatting fixes.  Handle cts_bitint.  Adjust
      	for added union in *specs.  Handle RID_BITINT.
      	(finish_declspecs): Handle cts_bitint.  Adjust for added union
      	in *specs.
      	* c-parser.cc (c_keyword_starts_typename, c_token_starts_declspecs,
      	c_parser_declspecs, c_parser_gnu_attribute_any_word): Handle
      	RID_BITINT.
      	(c_parser_omp_clause_schedule): Handle BITINT_TYPE like INTEGER_TYPE.
      	* c-tree.h (enum c_typespec_keyword): Mention _BitInt in comment.
      	Add cts_bitint enumerator.
      	(struct c_declspecs): Move int_n_idx and floatn_nx_idx into a union
      	and add bitint_prec there as well.
      	* c-typeck.cc (c_common_type, comptypes_internal):
      	Handle BITINT_TYPE.
      	(perform_integral_promotions): Promote BITINT_TYPE bit-fields to
      	their declared type.
      	(build_array_ref, build_unary_op, build_conditional_expr,
      	build_c_cast, convert_for_assignment, digest_init, build_binary_op):
      	Handle BITINT_TYPE.
      	* c-fold.cc (c_fully_fold_internal): Handle BITINT_TYPE like
      	INTEGER_TYPE.
      	* c-aux-info.cc (gen_type): Handle BITINT_TYPE.
      libcpp/
      	* expr.cc (interpret_int_suffix): Handle wb and WB suffixes.
      	* include/cpplib.h (CPP_N_BITINT): Define.
      8c984a1c
  6. Jan 16, 2023
  7. Oct 14, 2022
    • Jakub Jelinek's avatar
      middle-end, c++, i386, libgcc: std::bfloat16_t and __bf16 arithmetic support · c2565a31
      Jakub Jelinek authored
      Here is a complete patch to add std::bfloat16_t support on
      x86 (AArch64 and ARM left for later).  Almost no BFmode optabs
      are added by the patch, so for binops/unops it extends to SFmode
      first and then truncates back to BFmode.
      For {HF,SF,DF,XF,TF}mode -> BFmode conversions libgcc has implementations
      of all those conversions so that we avoid double rounding, for
      BFmode -> {DF,XF,TF}mode conversions to avoid growing libgcc too much
      it emits BFmode -> SFmode conversion first and then converts to the even
      wider mode, neither step should be imprecise.
      For BFmode -> HFmode, it first emits a precise BFmode -> SFmode conversion
      and then SFmode -> HFmode, because neither format is subset or superset
      of the other, while SFmode is superset of both.
      expr.cc then contains a -ffast-math optimization of the BF -> SF and
      SF -> BF conversions if we don't optimize for space (and for the latter
      if -frounding-math isn't enabled either).
      For x86, perhaps truncsfbf2 optab could be defined for TARGET_AVX512BF16
      but IMNSHO should FAIL if !flag_finite_math || flag_rounding_math
      || !flag_unsafe_math_optimizations, because I think the insn doesn't
      raise on sNaNs, hardcodes round to nearest and flushes denormals to zero.
      By default (unless x86 -fexcess-precision=16) we use float excess
      precision for BFmode, so truncate only on explicit casts and assignments.
      The patch introduces a single __bf16 builtin - __builtin_nansf16b,
      because (__bf16) __builtin_nansf ("") will drop the sNaN into qNaN,
      and uses f16b suffix instead of bf16 because there would be ambiguity on
      log vs. logb - __builtin_logbf16 could be either log with bf16 suffix
      or logb with f16 suffix.  In other cases libstdc++ should mostly use
      __builtin_*f for std::bfloat16_t overloads (we have a problem with
      std::nextafter though but that one we have also for std::float16_t).
      
      2022-10-14  Jakub Jelinek  <jakub@redhat.com>
      
      gcc/
      	* tree-core.h (enum tree_index): Add TI_BFLOAT16_TYPE.
      	* tree.h (bfloat16_type_node): Define.
      	* tree.cc (excess_precision_type): Promote bfloat16_type_mode
      	like float16_type_mode.
      	(build_common_tree_nodes): Initialize bfloat16_type_node if
      	BFmode is supported.
      	* expmed.h (maybe_expand_shift): Declare.
      	* expmed.cc (maybe_expand_shift): No longer static.
      	* expr.cc (convert_mode_scalar): Don't ICE on BF -> HF or HF -> BF
      	conversions.  If there is no optab, handle BF -> {DF,XF,TF,HF}
      	conversions as separate BF -> SF -> {DF,XF,TF,HF} conversions, add
      	-ffast-math generic implementation for BF -> SF and SF -> BF
      	conversions.
      	* builtin-types.def (BT_BFLOAT16, BT_FN_BFLOAT16_CONST_STRING): New.
      	* builtins.def (BUILT_IN_NANSF16B): New builtin.
      	* fold-const-call.cc (fold_const_call): Handle CFN_BUILT_IN_NANSF16B.
      	* config/i386/i386.cc (classify_argument): Handle E_BCmode.
      	(ix86_libgcc_floating_mode_supported_p): Also return true for BFmode
      	for -msse2.
      	(ix86_mangle_type): Mangle BFmode as DF16b.
      	(ix86_invalid_conversion, ix86_invalid_unary_op,
      	ix86_invalid_binary_op): Remove.
      	(TARGET_INVALID_CONVERSION, TARGET_INVALID_UNARY_OP,
      	TARGET_INVALID_BINARY_OP): Don't redefine.
      	* config/i386/i386-builtins.cc (ix86_bf16_type_node): Remove.
      	(ix86_register_bf16_builtin_type): Use bfloat16_type_node rather than
      	ix86_bf16_type_node, only create it if still NULL.
      	* config/i386/i386-builtin-types.def (BFLOAT16): Likewise.
      	* config/i386/i386.md (cbranchbf4, cstorebf4): New expanders.
      gcc/c-family/
      	* c-cppbuiltin.cc (c_cpp_builtins): If bfloat16_type_node,
      	predefine __BFLT16_*__ macros and for C++23 also
      	__STDCPP_BFLOAT16_T__.  Predefine bfloat16_type_node related
      	macros for -fbuilding-libgcc.
      	* c-lex.cc (interpret_float): Handle CPP_N_BFLOAT16.
      gcc/c/
      	* c-typeck.cc (convert_arguments): Don't promote __bf16 to
      	double.
      gcc/cp/
      	* cp-tree.h (extended_float_type_p): Return true for
      	bfloat16_type_node.
      	* typeck.cc (cp_compare_floating_point_conversion_ranks): Set
      	extended{1,2} if mv{1,2} is bfloat16_type_node.  Adjust comment.
      gcc/testsuite/
      	* lib/target-supports.exp (check_effective_target_bfloat16,
      	check_effective_target_bfloat16_runtime, add_options_for_bfloat16):
      	New.
      	* gcc.dg/torture/bfloat16-basic.c: New test.
      	* gcc.dg/torture/bfloat16-builtin.c: New test.
      	* gcc.dg/torture/bfloat16-builtin-issignaling-1.c: New test.
      	* gcc.dg/torture/bfloat16-complex.c: New test.
      	* gcc.dg/torture/builtin-issignaling-1.c: Allow to be includable
      	from bfloat16-builtin-issignaling-1.c.
      	* gcc.dg/torture/floatn-basic.h: Allow to be includable from
      	bfloat16-basic.c.
      	* gcc.target/i386/vect-bfloat16-typecheck_2.c: Adjust expected
      	diagnostics.
      	* gcc.target/i386/sse2-bfloat16-scalar-typecheck.c: Likewise.
      	* gcc.target/i386/vect-bfloat16-typecheck_1.c: Likewise.
      	* g++.target/i386/bfloat_cpp_typecheck.C: Likewise.
      libcpp/
      	* include/cpplib.h (CPP_N_BFLOAT16): Define.
      	* expr.cc (interpret_float_suffix): Handle bf16 and BF16 suffixes for
      	C++.
      libgcc/
      	* config/i386/t-softfp (softfp_extensions): Add bfsf.
      	(softfp_truncations): Add tfbf xfbf dfbf sfbf hfbf.
      	(CFLAGS-extendbfsf2.c, CFLAGS-truncsfbf2.c, CFLAGS-truncdfbf2.c,
      	CFLAGS-truncxfbf2.c, CFLAGS-trunctfbf2.c, CFLAGS-trunchfbf2.c): Add
      	-msse2.
      	* config/i386/libgcc-glibc.ver (GCC_13.0.0): Export
      	__extendbfsf2 and __trunc{s,d,x,t,h}fbf2.
      	* config/i386/sfp-machine.h (_FP_NANSIGN_B): Define.
      	* config/i386/64/sfp-machine.h (_FP_NANFRAC_B): Define.
      	* config/i386/32/sfp-machine.h (_FP_NANFRAC_B): Define.
      	* soft-fp/brain.h: New file.
      	* soft-fp/truncsfbf2.c: New file.
      	* soft-fp/truncdfbf2.c: New file.
      	* soft-fp/truncxfbf2.c: New file.
      	* soft-fp/trunctfbf2.c: New file.
      	* soft-fp/trunchfbf2.c: New file.
      	* soft-fp/truncbfhf2.c: New file.
      	* soft-fp/extendbfsf2.c: New file.
      libiberty/
      	* cp-demangle.h (D_BUILTIN_TYPE_COUNT): Increment.
      	* cp-demangle.c (cplus_demangle_builtin_types): Add std::bfloat16_t
      	entry.
      	(cplus_demangle_type): Demangle DF16b.
      	* testsuite/demangle-expected (_Z3xxxDF16b): New test.
      c2565a31
  8. Sep 27, 2022
    • Jakub Jelinek's avatar
      c++: Implement P1467R9 - Extended floating-point types and standard names... · b0420889
      Jakub Jelinek authored
      c++: Implement P1467R9 - Extended floating-point types and standard names compiler part except for bfloat16 [PR106652]
      
      The following patch implements the compiler part of C++23
      P1467R9 - Extended floating-point types and standard names compiler part
      by introducing _Float{16,32,64,128} as keywords and builtin types
      like they are implemented for C already since GCC 7, with DF{16,32,64,128}_
      mangling.
      It also introduces _Float{32,64,128}x for C++ with the
      https://github.com/itanium-cxx-abi/cxx-abi/pull/147
      proposed mangling of DF{32,64,128}x.
      The patch doesn't add anything for bfloat16_t support, as right now
      __bf16 type refuses all conversions and arithmetic operations.
      The patch wants to keep backwards compatibility with how __float128 has
      been handled in C++ before, both for mangling and behavior in binary
      operations, overload resolution etc.  So, there are some backend changes
      where for C __float128 and _Float128 are the same type (float128_type_node
      and float128t_type_node are the same pointer), but for C++ they are distinct
      types which mangle differently and _Float128 is treated as extended
      floating-point type while __float128 is treated as non-standard floating
      point type.  The various C++23 changes about how floating-point types
      are changed are actually implemented as written in the spec only if at least
      one of the types involved is _Float{16,32,64,128,32x,64x,128x} (_FloatNx are
      also treated as extended floating-point types) and kept previous behavior
      otherwise.  For float/double/long double the rules are actually written that
      they behave the same as before.
      There is some backwards incompatibility at least on x86 regarding _Float16,
      because that type was already used by that name and with the DF16_ mangling
      (but only since GCC 12 and I think it isn't that widely used in the wild
      yet).  E.g. config/i386/avx512fp16intrin.h shows the issues, where
      in C or in GCC 12 in C++ one could pass 0.0f to a builtin taking _Float16
      argument, but with the changes that is not possible anymore, one needs
      to either use 0.0f16 or (_Float16) 0.0f.
      We have also a problem with glibc headers, where since glibc 2.27
      math.h and complex.h aren't compilable with these changes.  One gets
      errors like:
      In file included from /usr/include/math.h:43,
                       from abc.c:1:
      /usr/include/bits/floatn.h:86:9: error: multiple types in one declaration
         86 | typedef __float128 _Float128;
            |         ^~~~~~~~~~
      /usr/include/bits/floatn.h:86:20: error: declaration does not declare anything [-fpermissive]
         86 | typedef __float128 _Float128;
            |                    ^~~~~~~~~
      In file included from /usr/include/bits/floatn.h:119:
      /usr/include/bits/floatn-common.h:214:9: error: multiple types in one declaration
        214 | typedef float _Float32;
            |         ^~~~~
      /usr/include/bits/floatn-common.h:214:15: error: declaration does not declare anything [-fpermissive]
        214 | typedef float _Float32;
            |               ^~~~~~~~
      /usr/include/bits/floatn-common.h:251:9: error: multiple types in one declaration
        251 | typedef double _Float64;
            |         ^~~~~~
      /usr/include/bits/floatn-common.h:251:16: error: declaration does not declare anything [-fpermissive]
        251 | typedef double _Float64;
            |                ^~~~~~~~
      This is from snippets like:
       /* The remaining of this file provides support for older compilers.  */
       # if __HAVE_FLOAT128
      
       /* The type _Float128 exists only since GCC 7.0.  */
       #  if !__GNUC_PREREQ (7, 0) || defined __cplusplus
       typedef __float128 _Float128;
       #  endif
      where it hardcodes that C++ doesn't have _Float{16,32,64,128,32x,64x,128x} support nor
      {f,F}{16,32,64,128}{,x} literal suffixes nor _Complex _Float{16,32,64,128,32x,64x,128x}.
      The patch fixincludes this for now and hopefully if this is committed, then
      glibc can change those.  The patch changes those
       #  if !__GNUC_PREREQ (7, 0) || defined __cplusplus
      conditions to
       #  if !__GNUC_PREREQ (7, 0) || (defined __cplusplus && !__GNUC_PREREQ (13, 0))
      Another thing is mangling, as said above, Itanium C++ ABI specifies
      DF <number> _ as _Float{16,32,64,128} mangling, but GCC was implementing
      a mangling incompatible with that starting with DF for fixed point types.
      Fixed point was never supported in C++ though, I believe the reason why
      the mangling has been added was that due to a bug it would leak into the
      C++ FE through decltype (0.0r) etc.  But that has been shortly after the
      mangling was added fixed (I think in the same GCC release cycle), so we
      now reject 0.0r etc. in C++.  If we ever need the fixed point mangling,
      I think it can be readded but better with a different prefix so that it
      doesn't conflict with the published standard manglings.  So, this patch
      also kills the fixed point mangling and implements the DF <number> _
      demangling.
      The patch predefines __STDCPP_FLOAT{16,32,64,128}_T__ macros when
      those types are available, but only for C++23, while the underlying types
      are available in C++98 and later including the {f,F}{16,32,64,128} literal
      suffixes (but those with a pedwarn for C++20 and earlier).  My understanding
      is that it needs to be predefined by the compiler, on the other side
      predefining even for older modes when <stdfloat> is a new C++23 header
      would be weird.  One can find out if _Float{16,32,64,128,32x,64x,128x} is
      supported in C++ by
      __GNUC__ >= 13 && defined(__FLT{16,32,64,128,32X,64X,128X}_MANT_DIG__)
      (but that doesn't work well with older G++ 13 snapshots).
      
      As for std::bfloat16_t, three targets (aarch64, arm and x86) apparently
      "support" __bf16 type which has the bfloat16 format, but isn't really
      usable, e.g. {aarch64,arm,ix86}_invalid_conversion disallow any conversions
      from or to type with BFmode, {aarch64,arm,ix86}_invalid_unary_op disallows
      any unary operations on those except for ADDR_EXPR and
      {aarch64,arm,ix86}_invalid_binary_op disallows any binary operation on
      those.  So, I think we satisfy:
      "If the implementation supports an extended floating-point type with the
      properties, as specified by ISO/IEC/IEEE 60559, of radix (b) of 2, storage
      width in bits (k) of 16, precision in bits (p) of 8, maximum exponent (emax)
      of 127, and exponent field width in bits (w) of 8, then the typedef-name
      std::bfloat16_t is defined in the header <stdfloat> and names such a type,
      the macro __STDCPP_BFLOAT16_T__ is defined, and the floating-point literal
      suffixes bf16 and BF16 are supported."
      because we don't really support those right now.
      
      2022-09-27  Jakub Jelinek  <jakub@redhat.com>
      
      	PR c++/106652
      	PR c++/85518
      gcc/
      	* tree-core.h (enum tree_index): Add TI_FLOAT128T_TYPE
      	enumerator.
      	* tree.h (float128t_type_node): Define.
      	* tree.cc (build_common_tree_nodes): Initialize float128t_type_node.
      	* builtins.def (DEF_FLOATN_BUILTIN): Adjust comment now that
      	_Float<N> is supported in C++ too.
      	* config/i386/i386.cc (ix86_mangle_type): Only mangle as "g"
      	float128t_type_node.
      	* config/i386/i386-builtins.cc (ix86_init_builtin_types): Use
      	float128t_type_node for __float128 instead of float128_type_node
      	and create it if NULL.
      	* config/i386/avx512fp16intrin.h (_mm_setzero_ph, _mm256_setzero_ph,
      	_mm512_setzero_ph, _mm_set_sh, _mm_load_sh): Use 0.0f16 instead of
      	0.0f.
      	* config/ia64/ia64.cc (ia64_init_builtins): Use
      	float128t_type_node for __float128 instead of float128_type_node
      	and create it if NULL.
      	* config/rs6000/rs6000-c.cc (is_float128_p): Also return true
      	for float128t_type_node if non-NULL.
      	* config/rs6000/rs6000.cc (rs6000_mangle_type): Don't mangle
      	float128_type_node as "u9__ieee128".
      	* config/rs6000/rs6000-builtin.cc (rs6000_init_builtins): Use
      	float128t_type_node for __float128 instead of float128_type_node
      	and create it if NULL.
      gcc/c-family/
      	* c-common.cc (c_common_reswords): Change _Float{16,32,64,128} and
      	_Float{32,64,128}x flags from D_CONLY to 0.
      	(shorten_binary_op): Punt if common_type returns error_mark_node.
      	(shorten_compare): Likewise.
      	(c_common_nodes_and_builtins): For C++ record _Float{16,32,64,128}
      	and _Float{32,64,128}x builtin types if available.  For C++
      	clear float128t_type_node.
      	* c-cppbuiltin.cc (c_cpp_builtins): Predefine
      	__STDCPP_FLOAT{16,32,64,128}_T__ for C++23 if supported.
      	* c-lex.cc (interpret_float): For q/Q suffixes prefer
      	float128t_type_node over float128_type_node.  Allow
      	{f,F}{16,32,64,128} suffixes for C++ if supported with pedwarn
      	for C++20 and older.  Allow {f,F}{32,64,128}x suffixes for C++
      	with pedwarn.  Don't call excess_precision_type for C++.
      gcc/cp/
      	* cp-tree.h (cp_compare_floating_point_conversion_ranks): Implement
      	P1467R9 - Extended floating-point types and standard names except
      	for std::bfloat16_t for now.  Declare.
      	(extended_float_type_p): New inline function.
      	* mangle.cc (write_builtin_type): Mangle float{16,32,64,128}_type_node
      	as DF{16,32,64,128}_.  Mangle float{32,64,128}x_type_node as
      	DF{32,64,128}x.  Remove FIXED_POINT_TYPE mangling that conflicts
      	with that.
      	* typeck2.cc (check_narrowing): If one of ftype or type is extended
      	floating-point type, compare floating-point conversion ranks.
      	* parser.cc (cp_keyword_starts_decl_specifier_p): Handle
      	CASE_RID_FLOATN_NX.
      	(cp_parser_simple_type_specifier): Likewise and diagnose missing
      	_Float<N> or _Float<N>x support if not supported by target.
      	* typeck.cc (cp_compare_floating_point_conversion_ranks): New function.
      	(cp_common_type): If both types are REAL_TYPE and one or both are
      	extended floating-point types, select common type based on comparison
      	of floating-point conversion ranks and subranks.
      	(cp_build_binary_op): Diagnose operation with floating point arguments
      	with unordered conversion ranks.
      	* call.cc (standard_conversion): For floating-point conversion, if
      	either from or to are extended floating-point types, set conv->bad_p
      	for implicit conversion from larger to smaller conversion rank or
      	with unordered conversion ranks.
      	(convert_like_internal): Emit a pedwarn on such conversions.
      	(build_conditional_expr): Diagnose operation with floating point
      	arguments with unordered conversion ranks.
      	(convert_arg_to_ellipsis): Don't promote extended floating-point types
      	narrower than double to double.
      	(compare_ics): Implement P1467R9 [over.ics.rank]/4 changes.
      gcc/testsuite/
      	* g++.dg/cpp23/ext-floating1.C: New test.
      	* g++.dg/cpp23/ext-floating2.C: New test.
      	* g++.dg/cpp23/ext-floating3.C: New test.
      	* g++.dg/cpp23/ext-floating4.C: New test.
      	* g++.dg/cpp23/ext-floating5.C: New test.
      	* g++.dg/cpp23/ext-floating6.C: New test.
      	* g++.dg/cpp23/ext-floating7.C: New test.
      	* g++.dg/cpp23/ext-floating8.C: New test.
      	* g++.dg/cpp23/ext-floating9.C: New test.
      	* g++.dg/cpp23/ext-floating10.C: New test.
      	* g++.dg/cpp23/ext-floating.h: New file.
      	* g++.target/i386/float16-1.C: Adjust expected diagnostics.
      libcpp/
      	* expr.cc (interpret_float_suffix): Allow {f,F}{16,32,64,128} and
      	{f,F}{32,64,128}x suffixes for C++.
      include/
      	* demangle.h (enum demangle_component_type): Add
      	DEMANGLE_COMPONENT_EXTENDED_BUILTIN_TYPE.
      	(struct demangle_component): Add u.s_extended_builtin member.
      libiberty/
      	* cp-demangle.c (d_dump): Handle
      	DEMANGLE_COMPONENT_EXTENDED_BUILTIN_TYPE.  Don't handle
      	DEMANGLE_COMPONENT_FIXED_TYPE.
      	(d_make_extended_builtin_type): New function.
      	(cplus_demangle_builtin_types): Add _Float entry.
      	(cplus_demangle_type): For DF demangle it as _Float<N> or
      	_Float<N>x rather than fixed point which conflicts with it.
      	(d_count_templates_scopes): Handle
      	DEMANGLE_COMPONENT_EXTENDED_BUILTIN_TYPE.  Just break; for
      	DEMANGLE_COMPONENT_FIXED_TYPE.
      	(d_find_pack): Handle DEMANGLE_COMPONENT_EXTENDED_BUILTIN_TYPE.
      	Don't handle DEMANGLE_COMPONENT_FIXED_TYPE.
      	(d_print_comp_inner): Likewise.
      	* cp-demangle.h (D_BUILTIN_TYPE_COUNT): Bump.
      	* testsuite/demangle-expected: Replace _Z3xxxDFyuVb test
      	with _Z3xxxDF16_DF32_DF64_DF128_CDF16_Vb.  Add
      	_Z3xxxDF32xDF64xDF128xCDF32xVb test.
      fixincludes/
      	* inclhack.def (glibc_cxx_floatn_1, glibc_cxx_floatn_2,
      	glibc_cxx_floatn_3): New fixes.
      	* tests/base/bits/floatn.h: New file.
      	* fixincl.x: Regenerated.
      b0420889
  9. Sep 07, 2022
    • Joseph Myers's avatar
      c: New C2x keywords · 0a91bdaf
      Joseph Myers authored
      C2x follows C++ in making alignas, alignof, bool, false,
      static_assert, thread_local and true keywords; implement this
      accordingly.  This implementation makes them normal keywords in C2x
      mode just like any other keyword (C2x leaves open the possibility of
      implementation using predefined macros instead - thus, there aren't
      any testcases asserting that they aren't macros).  As in C++ and
      previous versions of C, true and false are handled like signed 1 and 0
      in #if (there was an intermediate state in some C2x drafts where they
      had different macro expansions that were unsigned in #if).
      
      Bootstrapped with no regressions for x86_64-pc-linux-gnu.
      
      As with the removal of unprototyped functions, this change has a high
      risk of breaking some old code and people doing GNU/Linux distribution
      builds may wish to see how much is broken in a build with a -std=gnu2x
      default.
      
      gcc/
      	* ginclude/stdalign.h [defined __STDC_VERSION__ &&
      	__STDC_VERSION__ > 201710L]: Disable all content.
      	* ginclude/stdbool.h [defined __STDC_VERSION__ && __STDC_VERSION__
      	> 201710L] (bool, true, false): Do not define.
      
      gcc/c-family/
      	* c-common.cc (c_common_reswords): Use D_C2X instead of D_CXXONLY
      	for alignas, alignof, bool, false, static_assert, thread_local and
      	true.
      
      gcc/c/
      	* c-parser.cc (c_parser_static_assert_declaration_no_semi)
      	(c_parser_alignas_specifier, c_parser_alignof_expression): Allow
      	for C2x spellings of keywords.
      	(c_parser_postfix_expression): Handle RID_TRUE and RID_FALSE.
      
      gcc/testsuite/
      	* gcc.dg/c11-keywords-1.c, gcc.dg/c2x-align-1.c,
      	gcc.dg/c2x-align-6.c, gcc.dg/c2x-bool-2.c,
      	gcc.dg/c2x-static-assert-3.c, gcc.dg/c2x-static-assert-4.c,
      	gcc.dg/c2x-thread-local-1.c: New tests.
      	* gcc.dg/c2x-bool-1.c: Update expectations.
      
      libcpp/
      	* include/cpplib.h (struct cpp_options): Add true_false.
      	* expr.cc (eval_token): Check true_false not cplusplus to
      	determine whether to handle true and false keywords.
      	* init.cc (struct lang_flags): Add true_false.
      	(lang_defaults): Update.
      	(cpp_set_lang): Set true_false.
      0a91bdaf
  10. May 29, 2022
    • Jakub Jelinek's avatar
      libcpp: Ignore CPP_PADDING tokens in _cpp_parse_expr [PR105732] · 58a40e76
      Jakub Jelinek authored
      The first part of the following testcase (m1-m3 macros and its use)
      regressed with my PR89971 fix, but as the m1,m4-m5 and its use part shows,
      the problem isn't new, we can emit a CPP_PADDING token to avoid it from
      being adjacent to whatever comes after the __VA_OPT__ (in this case there
      is nothing afterwards, true).
      
      In most cases these CPP_PADDING tokens don't matter, all other
      callers of cpp_get_token_with_location either ignore CPP_PADDING tokens
      completely (e.g. c_lex_with_flags) or they just remember them and
      take them into account when printing stuff whether there should be
      added whitespace or not (scan_translation_unit + token_streamer::stream).
      So, I think we should just ignore CPP_PADDING tokens the same way in
      _cpp_parse_expr.
      
      2022-05-27  Jakub Jelinek  <jakub@redhat.com>
      
      	PR preprocessor/105732
      	* expr.cc (_cpp_parse_expr): Handle CPP_PADDING by just another
      	token.
      
      	* c-c++-common/cpp/va-opt-10.c: New test.
      58a40e76
  11. Jan 17, 2022
    • Martin Liska's avatar
      Rename .c files to .cc files. · 5c69acb3
      Martin Liska authored
      gcc/ada/ChangeLog:
      
      	* adadecode.c: Moved to...
      	* adadecode.cc: ...here.
      	* affinity.c: Moved to...
      	* affinity.cc: ...here.
      	* argv-lynxos178-raven-cert.c: Moved to...
      	* argv-lynxos178-raven-cert.cc: ...here.
      	* argv.c: Moved to...
      	* argv.cc: ...here.
      	* aux-io.c: Moved to...
      	* aux-io.cc: ...here.
      	* cio.c: Moved to...
      	* cio.cc: ...here.
      	* cstreams.c: Moved to...
      	* cstreams.cc: ...here.
      	* env.c: Moved to...
      	* env.cc: ...here.
      	* exit.c: Moved to...
      	* exit.cc: ...here.
      	* expect.c: Moved to...
      	* expect.cc: ...here.
      	* final.c: Moved to...
      	* final.cc: ...here.
      	* gcc-interface/cuintp.c: Moved to...
      	* gcc-interface/cuintp.cc: ...here.
      	* gcc-interface/decl.c: Moved to...
      	* gcc-interface/decl.cc: ...here.
      	* gcc-interface/misc.c: Moved to...
      	* gcc-interface/misc.cc: ...here.
      	* gcc-interface/targtyps.c: Moved to...
      	* gcc-interface/targtyps.cc: ...here.
      	* gcc-interface/trans.c: Moved to...
      	* gcc-interface/trans.cc: ...here.
      	* gcc-interface/utils.c: Moved to...
      	* gcc-interface/utils.cc: ...here.
      	* gcc-interface/utils2.c: Moved to...
      	* gcc-interface/utils2.cc: ...here.
      	* init.c: Moved to...
      	* init.cc: ...here.
      	* initialize.c: Moved to...
      	* initialize.cc: ...here.
      	* libgnarl/thread.c: Moved to...
      	* libgnarl/thread.cc: ...here.
      	* link.c: Moved to...
      	* link.cc: ...here.
      	* locales.c: Moved to...
      	* locales.cc: ...here.
      	* mkdir.c: Moved to...
      	* mkdir.cc: ...here.
      	* raise.c: Moved to...
      	* raise.cc: ...here.
      	* rtfinal.c: Moved to...
      	* rtfinal.cc: ...here.
      	* rtinit.c: Moved to...
      	* rtinit.cc: ...here.
      	* seh_init.c: Moved to...
      	* seh_init.cc: ...here.
      	* sigtramp-armdroid.c: Moved to...
      	* sigtramp-armdroid.cc: ...here.
      	* sigtramp-ios.c: Moved to...
      	* sigtramp-ios.cc: ...here.
      	* sigtramp-qnx.c: Moved to...
      	* sigtramp-qnx.cc: ...here.
      	* sigtramp-vxworks.c: Moved to...
      	* sigtramp-vxworks.cc: ...here.
      	* socket.c: Moved to...
      	* socket.cc: ...here.
      	* tracebak.c: Moved to...
      	* tracebak.cc: ...here.
      	* version.c: Moved to...
      	* version.cc: ...here.
      	* vx_stack_info.c: Moved to...
      	* vx_stack_info.cc: ...here.
      
      gcc/ChangeLog:
      
      	* adjust-alignment.c: Moved to...
      	* adjust-alignment.cc: ...here.
      	* alias.c: Moved to...
      	* alias.cc: ...here.
      	* alloc-pool.c: Moved to...
      	* alloc-pool.cc: ...here.
      	* asan.c: Moved to...
      	* asan.cc: ...here.
      	* attribs.c: Moved to...
      	* attribs.cc: ...here.
      	* auto-inc-dec.c: Moved to...
      	* auto-inc-dec.cc: ...here.
      	* auto-profile.c: Moved to...
      	* auto-profile.cc: ...here.
      	* bb-reorder.c: Moved to...
      	* bb-reorder.cc: ...here.
      	* bitmap.c: Moved to...
      	* bitmap.cc: ...here.
      	* btfout.c: Moved to...
      	* btfout.cc: ...here.
      	* builtins.c: Moved to...
      	* builtins.cc: ...here.
      	* caller-save.c: Moved to...
      	* caller-save.cc: ...here.
      	* calls.c: Moved to...
      	* calls.cc: ...here.
      	* ccmp.c: Moved to...
      	* ccmp.cc: ...here.
      	* cfg.c: Moved to...
      	* cfg.cc: ...here.
      	* cfganal.c: Moved to...
      	* cfganal.cc: ...here.
      	* cfgbuild.c: Moved to...
      	* cfgbuild.cc: ...here.
      	* cfgcleanup.c: Moved to...
      	* cfgcleanup.cc: ...here.
      	* cfgexpand.c: Moved to...
      	* cfgexpand.cc: ...here.
      	* cfghooks.c: Moved to...
      	* cfghooks.cc: ...here.
      	* cfgloop.c: Moved to...
      	* cfgloop.cc: ...here.
      	* cfgloopanal.c: Moved to...
      	* cfgloopanal.cc: ...here.
      	* cfgloopmanip.c: Moved to...
      	* cfgloopmanip.cc: ...here.
      	* cfgrtl.c: Moved to...
      	* cfgrtl.cc: ...here.
      	* cgraph.c: Moved to...
      	* cgraph.cc: ...here.
      	* cgraphbuild.c: Moved to...
      	* cgraphbuild.cc: ...here.
      	* cgraphclones.c: Moved to...
      	* cgraphclones.cc: ...here.
      	* cgraphunit.c: Moved to...
      	* cgraphunit.cc: ...here.
      	* collect-utils.c: Moved to...
      	* collect-utils.cc: ...here.
      	* collect2-aix.c: Moved to...
      	* collect2-aix.cc: ...here.
      	* collect2.c: Moved to...
      	* collect2.cc: ...here.
      	* combine-stack-adj.c: Moved to...
      	* combine-stack-adj.cc: ...here.
      	* combine.c: Moved to...
      	* combine.cc: ...here.
      	* common/common-targhooks.c: Moved to...
      	* common/common-targhooks.cc: ...here.
      	* common/config/aarch64/aarch64-common.c: Moved to...
      	* common/config/aarch64/aarch64-common.cc: ...here.
      	* common/config/alpha/alpha-common.c: Moved to...
      	* common/config/alpha/alpha-common.cc: ...here.
      	* common/config/arc/arc-common.c: Moved to...
      	* common/config/arc/arc-common.cc: ...here.
      	* common/config/arm/arm-common.c: Moved to...
      	* common/config/arm/arm-common.cc: ...here.
      	* common/config/avr/avr-common.c: Moved to...
      	* common/config/avr/avr-common.cc: ...here.
      	* common/config/bfin/bfin-common.c: Moved to...
      	* common/config/bfin/bfin-common.cc: ...here.
      	* common/config/bpf/bpf-common.c: Moved to...
      	* common/config/bpf/bpf-common.cc: ...here.
      	* common/config/c6x/c6x-common.c: Moved to...
      	* common/config/c6x/c6x-common.cc: ...here.
      	* common/config/cr16/cr16-common.c: Moved to...
      	* common/config/cr16/cr16-common.cc: ...here.
      	* common/config/cris/cris-common.c: Moved to...
      	* common/config/cris/cris-common.cc: ...here.
      	* common/config/csky/csky-common.c: Moved to...
      	* common/config/csky/csky-common.cc: ...here.
      	* common/config/default-common.c: Moved to...
      	* common/config/default-common.cc: ...here.
      	* common/config/epiphany/epiphany-common.c: Moved to...
      	* common/config/epiphany/epiphany-common.cc: ...here.
      	* common/config/fr30/fr30-common.c: Moved to...
      	* common/config/fr30/fr30-common.cc: ...here.
      	* common/config/frv/frv-common.c: Moved to...
      	* common/config/frv/frv-common.cc: ...here.
      	* common/config/gcn/gcn-common.c: Moved to...
      	* common/config/gcn/gcn-common.cc: ...here.
      	* common/config/h8300/h8300-common.c: Moved to...
      	* common/config/h8300/h8300-common.cc: ...here.
      	* common/config/i386/i386-common.c: Moved to...
      	* common/config/i386/i386-common.cc: ...here.
      	* common/config/ia64/ia64-common.c: Moved to...
      	* common/config/ia64/ia64-common.cc: ...here.
      	* common/config/iq2000/iq2000-common.c: Moved to...
      	* common/config/iq2000/iq2000-common.cc: ...here.
      	* common/config/lm32/lm32-common.c: Moved to...
      	* common/config/lm32/lm32-common.cc: ...here.
      	* common/config/m32r/m32r-common.c: Moved to...
      	* common/config/m32r/m32r-common.cc: ...here.
      	* common/config/m68k/m68k-common.c: Moved to...
      	* common/config/m68k/m68k-common.cc: ...here.
      	* common/config/mcore/mcore-common.c: Moved to...
      	* common/config/mcore/mcore-common.cc: ...here.
      	* common/config/microblaze/microblaze-common.c: Moved to...
      	* common/config/microblaze/microblaze-common.cc: ...here.
      	* common/config/mips/mips-common.c: Moved to...
      	* common/config/mips/mips-common.cc: ...here.
      	* common/config/mmix/mmix-common.c: Moved to...
      	* common/config/mmix/mmix-common.cc: ...here.
      	* common/config/mn10300/mn10300-common.c: Moved to...
      	* common/config/mn10300/mn10300-common.cc: ...here.
      	* common/config/msp430/msp430-common.c: Moved to...
      	* common/config/msp430/msp430-common.cc: ...here.
      	* common/config/nds32/nds32-common.c: Moved to...
      	* common/config/nds32/nds32-common.cc: ...here.
      	* common/config/nios2/nios2-common.c: Moved to...
      	* common/config/nios2/nios2-common.cc: ...here.
      	* common/config/nvptx/nvptx-common.c: Moved to...
      	* common/config/nvptx/nvptx-common.cc: ...here.
      	* common/config/or1k/or1k-common.c: Moved to...
      	* common/config/or1k/or1k-common.cc: ...here.
      	* common/config/pa/pa-common.c: Moved to...
      	* common/config/pa/pa-common.cc: ...here.
      	* common/config/pdp11/pdp11-common.c: Moved to...
      	* common/config/pdp11/pdp11-common.cc: ...here.
      	* common/config/pru/pru-common.c: Moved to...
      	* common/config/pru/pru-common.cc: ...here.
      	* common/config/riscv/riscv-common.c: Moved to...
      	* common/config/riscv/riscv-common.cc: ...here.
      	* common/config/rs6000/rs6000-common.c: Moved to...
      	* common/config/rs6000/rs6000-common.cc: ...here.
      	* common/config/rx/rx-common.c: Moved to...
      	* common/config/rx/rx-common.cc: ...here.
      	* common/config/s390/s390-common.c: Moved to...
      	* common/config/s390/s390-common.cc: ...here.
      	* common/config/sh/sh-common.c: Moved to...
      	* common/config/sh/sh-common.cc: ...here.
      	* common/config/sparc/sparc-common.c: Moved to...
      	* common/config/sparc/sparc-common.cc: ...here.
      	* common/config/tilegx/tilegx-common.c: Moved to...
      	* common/config/tilegx/tilegx-common.cc: ...here.
      	* common/config/tilepro/tilepro-common.c: Moved to...
      	* common/config/tilepro/tilepro-common.cc: ...here.
      	* common/config/v850/v850-common.c: Moved to...
      	* common/config/v850/v850-common.cc: ...here.
      	* common/config/vax/vax-common.c: Moved to...
      	* common/config/vax/vax-common.cc: ...here.
      	* common/config/visium/visium-common.c: Moved to...
      	* common/config/visium/visium-common.cc: ...here.
      	* common/config/xstormy16/xstormy16-common.c: Moved to...
      	* common/config/xstormy16/xstormy16-common.cc: ...here.
      	* common/config/xtensa/xtensa-common.c: Moved to...
      	* common/config/xtensa/xtensa-common.cc: ...here.
      	* compare-elim.c: Moved to...
      	* compare-elim.cc: ...here.
      	* config/aarch64/aarch64-bti-insert.c: Moved to...
      	* config/aarch64/aarch64-bti-insert.cc: ...here.
      	* config/aarch64/aarch64-builtins.c: Moved to...
      	* config/aarch64/aarch64-builtins.cc: ...here.
      	* config/aarch64/aarch64-c.c: Moved to...
      	* config/aarch64/aarch64-c.cc: ...here.
      	* config/aarch64/aarch64-d.c: Moved to...
      	* config/aarch64/aarch64-d.cc: ...here.
      	* config/aarch64/aarch64.c: Moved to...
      	* config/aarch64/aarch64.cc: ...here.
      	* config/aarch64/cortex-a57-fma-steering.c: Moved to...
      	* config/aarch64/cortex-a57-fma-steering.cc: ...here.
      	* config/aarch64/driver-aarch64.c: Moved to...
      	* config/aarch64/driver-aarch64.cc: ...here.
      	* config/aarch64/falkor-tag-collision-avoidance.c: Moved to...
      	* config/aarch64/falkor-tag-collision-avoidance.cc: ...here.
      	* config/aarch64/host-aarch64-darwin.c: Moved to...
      	* config/aarch64/host-aarch64-darwin.cc: ...here.
      	* config/alpha/alpha.c: Moved to...
      	* config/alpha/alpha.cc: ...here.
      	* config/alpha/driver-alpha.c: Moved to...
      	* config/alpha/driver-alpha.cc: ...here.
      	* config/arc/arc-c.c: Moved to...
      	* config/arc/arc-c.cc: ...here.
      	* config/arc/arc.c: Moved to...
      	* config/arc/arc.cc: ...here.
      	* config/arc/driver-arc.c: Moved to...
      	* config/arc/driver-arc.cc: ...here.
      	* config/arm/aarch-common.c: Moved to...
      	* config/arm/aarch-common.cc: ...here.
      	* config/arm/arm-builtins.c: Moved to...
      	* config/arm/arm-builtins.cc: ...here.
      	* config/arm/arm-c.c: Moved to...
      	* config/arm/arm-c.cc: ...here.
      	* config/arm/arm-d.c: Moved to...
      	* config/arm/arm-d.cc: ...here.
      	* config/arm/arm.c: Moved to...
      	* config/arm/arm.cc: ...here.
      	* config/arm/driver-arm.c: Moved to...
      	* config/arm/driver-arm.cc: ...here.
      	* config/avr/avr-c.c: Moved to...
      	* config/avr/avr-c.cc: ...here.
      	* config/avr/avr-devices.c: Moved to...
      	* config/avr/avr-devices.cc: ...here.
      	* config/avr/avr-log.c: Moved to...
      	* config/avr/avr-log.cc: ...here.
      	* config/avr/avr.c: Moved to...
      	* config/avr/avr.cc: ...here.
      	* config/avr/driver-avr.c: Moved to...
      	* config/avr/driver-avr.cc: ...here.
      	* config/avr/gen-avr-mmcu-specs.c: Moved to...
      	* config/avr/gen-avr-mmcu-specs.cc: ...here.
      	* config/avr/gen-avr-mmcu-texi.c: Moved to...
      	* config/avr/gen-avr-mmcu-texi.cc: ...here.
      	* config/bfin/bfin.c: Moved to...
      	* config/bfin/bfin.cc: ...here.
      	* config/bpf/bpf.c: Moved to...
      	* config/bpf/bpf.cc: ...here.
      	* config/bpf/coreout.c: Moved to...
      	* config/bpf/coreout.cc: ...here.
      	* config/c6x/c6x.c: Moved to...
      	* config/c6x/c6x.cc: ...here.
      	* config/cr16/cr16.c: Moved to...
      	* config/cr16/cr16.cc: ...here.
      	* config/cris/cris.c: Moved to...
      	* config/cris/cris.cc: ...here.
      	* config/csky/csky.c: Moved to...
      	* config/csky/csky.cc: ...here.
      	* config/darwin-c.c: Moved to...
      	* config/darwin-c.cc: ...here.
      	* config/darwin-d.c: Moved to...
      	* config/darwin-d.cc: ...here.
      	* config/darwin-driver.c: Moved to...
      	* config/darwin-driver.cc: ...here.
      	* config/darwin-f.c: Moved to...
      	* config/darwin-f.cc: ...here.
      	* config/darwin.c: Moved to...
      	* config/darwin.cc: ...here.
      	* config/default-c.c: Moved to...
      	* config/default-c.cc: ...here.
      	* config/default-d.c: Moved to...
      	* config/default-d.cc: ...here.
      	* config/dragonfly-d.c: Moved to...
      	* config/dragonfly-d.cc: ...here.
      	* config/epiphany/epiphany.c: Moved to...
      	* config/epiphany/epiphany.cc: ...here.
      	* config/epiphany/mode-switch-use.c: Moved to...
      	* config/epiphany/mode-switch-use.cc: ...here.
      	* config/epiphany/resolve-sw-modes.c: Moved to...
      	* config/epiphany/resolve-sw-modes.cc: ...here.
      	* config/fr30/fr30.c: Moved to...
      	* config/fr30/fr30.cc: ...here.
      	* config/freebsd-d.c: Moved to...
      	* config/freebsd-d.cc: ...here.
      	* config/frv/frv.c: Moved to...
      	* config/frv/frv.cc: ...here.
      	* config/ft32/ft32.c: Moved to...
      	* config/ft32/ft32.cc: ...here.
      	* config/gcn/driver-gcn.c: Moved to...
      	* config/gcn/driver-gcn.cc: ...here.
      	* config/gcn/gcn-run.c: Moved to...
      	* config/gcn/gcn-run.cc: ...here.
      	* config/gcn/gcn-tree.c: Moved to...
      	* config/gcn/gcn-tree.cc: ...here.
      	* config/gcn/gcn.c: Moved to...
      	* config/gcn/gcn.cc: ...here.
      	* config/gcn/mkoffload.c: Moved to...
      	* config/gcn/mkoffload.cc: ...here.
      	* config/glibc-c.c: Moved to...
      	* config/glibc-c.cc: ...here.
      	* config/glibc-d.c: Moved to...
      	* config/glibc-d.cc: ...here.
      	* config/h8300/h8300.c: Moved to...
      	* config/h8300/h8300.cc: ...here.
      	* config/host-darwin.c: Moved to...
      	* config/host-darwin.cc: ...here.
      	* config/host-hpux.c: Moved to...
      	* config/host-hpux.cc: ...here.
      	* config/host-linux.c: Moved to...
      	* config/host-linux.cc: ...here.
      	* config/host-netbsd.c: Moved to...
      	* config/host-netbsd.cc: ...here.
      	* config/host-openbsd.c: Moved to...
      	* config/host-openbsd.cc: ...here.
      	* config/host-solaris.c: Moved to...
      	* config/host-solaris.cc: ...here.
      	* config/i386/djgpp.c: Moved to...
      	* config/i386/djgpp.cc: ...here.
      	* config/i386/driver-i386.c: Moved to...
      	* config/i386/driver-i386.cc: ...here.
      	* config/i386/driver-mingw32.c: Moved to...
      	* config/i386/driver-mingw32.cc: ...here.
      	* config/i386/gnu-property.c: Moved to...
      	* config/i386/gnu-property.cc: ...here.
      	* config/i386/host-cygwin.c: Moved to...
      	* config/i386/host-cygwin.cc: ...here.
      	* config/i386/host-i386-darwin.c: Moved to...
      	* config/i386/host-i386-darwin.cc: ...here.
      	* config/i386/host-mingw32.c: Moved to...
      	* config/i386/host-mingw32.cc: ...here.
      	* config/i386/i386-builtins.c: Moved to...
      	* config/i386/i386-builtins.cc: ...here.
      	* config/i386/i386-c.c: Moved to...
      	* config/i386/i386-c.cc: ...here.
      	* config/i386/i386-d.c: Moved to...
      	* config/i386/i386-d.cc: ...here.
      	* config/i386/i386-expand.c: Moved to...
      	* config/i386/i386-expand.cc: ...here.
      	* config/i386/i386-features.c: Moved to...
      	* config/i386/i386-features.cc: ...here.
      	* config/i386/i386-options.c: Moved to...
      	* config/i386/i386-options.cc: ...here.
      	* config/i386/i386.c: Moved to...
      	* config/i386/i386.cc: ...here.
      	* config/i386/intelmic-mkoffload.c: Moved to...
      	* config/i386/intelmic-mkoffload.cc: ...here.
      	* config/i386/msformat-c.c: Moved to...
      	* config/i386/msformat-c.cc: ...here.
      	* config/i386/winnt-cxx.c: Moved to...
      	* config/i386/winnt-cxx.cc: ...here.
      	* config/i386/winnt-d.c: Moved to...
      	* config/i386/winnt-d.cc: ...here.
      	* config/i386/winnt-stubs.c: Moved to...
      	* config/i386/winnt-stubs.cc: ...here.
      	* config/i386/winnt.c: Moved to...
      	* config/i386/winnt.cc: ...here.
      	* config/i386/x86-tune-sched-atom.c: Moved to...
      	* config/i386/x86-tune-sched-atom.cc: ...here.
      	* config/i386/x86-tune-sched-bd.c: Moved to...
      	* config/i386/x86-tune-sched-bd.cc: ...here.
      	* config/i386/x86-tune-sched-core.c: Moved to...
      	* config/i386/x86-tune-sched-core.cc: ...here.
      	* config/i386/x86-tune-sched.c: Moved to...
      	* config/i386/x86-tune-sched.cc: ...here.
      	* config/ia64/ia64-c.c: Moved to...
      	* config/ia64/ia64-c.cc: ...here.
      	* config/ia64/ia64.c: Moved to...
      	* config/ia64/ia64.cc: ...here.
      	* config/iq2000/iq2000.c: Moved to...
      	* config/iq2000/iq2000.cc: ...here.
      	* config/linux.c: Moved to...
      	* config/linux.cc: ...here.
      	* config/lm32/lm32.c: Moved to...
      	* config/lm32/lm32.cc: ...here.
      	* config/m32c/m32c-pragma.c: Moved to...
      	* config/m32c/m32c-pragma.cc: ...here.
      	* config/m32c/m32c.c: Moved to...
      	* config/m32c/m32c.cc: ...here.
      	* config/m32r/m32r.c: Moved to...
      	* config/m32r/m32r.cc: ...here.
      	* config/m68k/m68k.c: Moved to...
      	* config/m68k/m68k.cc: ...here.
      	* config/mcore/mcore.c: Moved to...
      	* config/mcore/mcore.cc: ...here.
      	* config/microblaze/microblaze-c.c: Moved to...
      	* config/microblaze/microblaze-c.cc: ...here.
      	* config/microblaze/microblaze.c: Moved to...
      	* config/microblaze/microblaze.cc: ...here.
      	* config/mips/driver-native.c: Moved to...
      	* config/mips/driver-native.cc: ...here.
      	* config/mips/frame-header-opt.c: Moved to...
      	* config/mips/frame-header-opt.cc: ...here.
      	* config/mips/mips-d.c: Moved to...
      	* config/mips/mips-d.cc: ...here.
      	* config/mips/mips.c: Moved to...
      	* config/mips/mips.cc: ...here.
      	* config/mmix/mmix.c: Moved to...
      	* config/mmix/mmix.cc: ...here.
      	* config/mn10300/mn10300.c: Moved to...
      	* config/mn10300/mn10300.cc: ...here.
      	* config/moxie/moxie.c: Moved to...
      	* config/moxie/moxie.cc: ...here.
      	* config/msp430/driver-msp430.c: Moved to...
      	* config/msp430/driver-msp430.cc: ...here.
      	* config/msp430/msp430-c.c: Moved to...
      	* config/msp430/msp430-c.cc: ...here.
      	* config/msp430/msp430-devices.c: Moved to...
      	* config/msp430/msp430-devices.cc: ...here.
      	* config/msp430/msp430.c: Moved to...
      	* config/msp430/msp430.cc: ...here.
      	* config/nds32/nds32-cost.c: Moved to...
      	* config/nds32/nds32-cost.cc: ...here.
      	* config/nds32/nds32-fp-as-gp.c: Moved to...
      	* config/nds32/nds32-fp-as-gp.cc: ...here.
      	* config/nds32/nds32-intrinsic.c: Moved to...
      	* config/nds32/nds32-intrinsic.cc: ...here.
      	* config/nds32/nds32-isr.c: Moved to...
      	* config/nds32/nds32-isr.cc: ...here.
      	* config/nds32/nds32-md-auxiliary.c: Moved to...
      	* config/nds32/nds32-md-auxiliary.cc: ...here.
      	* config/nds32/nds32-memory-manipulation.c: Moved to...
      	* config/nds32/nds32-memory-manipulation.cc: ...here.
      	* config/nds32/nds32-pipelines-auxiliary.c: Moved to...
      	* config/nds32/nds32-pipelines-auxiliary.cc: ...here.
      	* config/nds32/nds32-predicates.c: Moved to...
      	* config/nds32/nds32-predicates.cc: ...here.
      	* config/nds32/nds32-relax-opt.c: Moved to...
      	* config/nds32/nds32-relax-opt.cc: ...here.
      	* config/nds32/nds32-utils.c: Moved to...
      	* config/nds32/nds32-utils.cc: ...here.
      	* config/nds32/nds32.c: Moved to...
      	* config/nds32/nds32.cc: ...here.
      	* config/netbsd-d.c: Moved to...
      	* config/netbsd-d.cc: ...here.
      	* config/netbsd.c: Moved to...
      	* config/netbsd.cc: ...here.
      	* config/nios2/nios2.c: Moved to...
      	* config/nios2/nios2.cc: ...here.
      	* config/nvptx/mkoffload.c: Moved to...
      	* config/nvptx/mkoffload.cc: ...here.
      	* config/nvptx/nvptx-c.c: Moved to...
      	* config/nvptx/nvptx-c.cc: ...here.
      	* config/nvptx/nvptx.c: Moved to...
      	* config/nvptx/nvptx.cc: ...here.
      	* config/openbsd-d.c: Moved to...
      	* config/openbsd-d.cc: ...here.
      	* config/or1k/or1k.c: Moved to...
      	* config/or1k/or1k.cc: ...here.
      	* config/pa/pa-d.c: Moved to...
      	* config/pa/pa-d.cc: ...here.
      	* config/pa/pa.c: Moved to...
      	* config/pa/pa.cc: ...here.
      	* config/pdp11/pdp11.c: Moved to...
      	* config/pdp11/pdp11.cc: ...here.
      	* config/pru/pru-passes.c: Moved to...
      	* config/pru/pru-passes.cc: ...here.
      	* config/pru/pru-pragma.c: Moved to...
      	* config/pru/pru-pragma.cc: ...here.
      	* config/pru/pru.c: Moved to...
      	* config/pru/pru.cc: ...here.
      	* config/riscv/riscv-builtins.c: Moved to...
      	* config/riscv/riscv-builtins.cc: ...here.
      	* config/riscv/riscv-c.c: Moved to...
      	* config/riscv/riscv-c.cc: ...here.
      	* config/riscv/riscv-d.c: Moved to...
      	* config/riscv/riscv-d.cc: ...here.
      	* config/riscv/riscv-shorten-memrefs.c: Moved to...
      	* config/riscv/riscv-shorten-memrefs.cc: ...here.
      	* config/riscv/riscv-sr.c: Moved to...
      	* config/riscv/riscv-sr.cc: ...here.
      	* config/riscv/riscv.c: Moved to...
      	* config/riscv/riscv.cc: ...here.
      	* config/rl78/rl78-c.c: Moved to...
      	* config/rl78/rl78-c.cc: ...here.
      	* config/rl78/rl78.c: Moved to...
      	* config/rl78/rl78.cc: ...here.
      	* config/rs6000/driver-rs6000.c: Moved to...
      	* config/rs6000/driver-rs6000.cc: ...here.
      	* config/rs6000/host-darwin.c: Moved to...
      	* config/rs6000/host-darwin.cc: ...here.
      	* config/rs6000/host-ppc64-darwin.c: Moved to...
      	* config/rs6000/host-ppc64-darwin.cc: ...here.
      	* config/rs6000/rbtree.c: Moved to...
      	* config/rs6000/rbtree.cc: ...here.
      	* config/rs6000/rs6000-c.c: Moved to...
      	* config/rs6000/rs6000-c.cc: ...here.
      	* config/rs6000/rs6000-call.c: Moved to...
      	* config/rs6000/rs6000-call.cc: ...here.
      	* config/rs6000/rs6000-d.c: Moved to...
      	* config/rs6000/rs6000-d.cc: ...here.
      	* config/rs6000/rs6000-gen-builtins.c: Moved to...
      	* config/rs6000/rs6000-gen-builtins.cc: ...here.
      	* config/rs6000/rs6000-linux.c: Moved to...
      	* config/rs6000/rs6000-linux.cc: ...here.
      	* config/rs6000/rs6000-logue.c: Moved to...
      	* config/rs6000/rs6000-logue.cc: ...here.
      	* config/rs6000/rs6000-p8swap.c: Moved to...
      	* config/rs6000/rs6000-p8swap.cc: ...here.
      	* config/rs6000/rs6000-pcrel-opt.c: Moved to...
      	* config/rs6000/rs6000-pcrel-opt.cc: ...here.
      	* config/rs6000/rs6000-string.c: Moved to...
      	* config/rs6000/rs6000-string.cc: ...here.
      	* config/rs6000/rs6000.c: Moved to...
      	* config/rs6000/rs6000.cc: ...here.
      	* config/rx/rx.c: Moved to...
      	* config/rx/rx.cc: ...here.
      	* config/s390/driver-native.c: Moved to...
      	* config/s390/driver-native.cc: ...here.
      	* config/s390/s390-c.c: Moved to...
      	* config/s390/s390-c.cc: ...here.
      	* config/s390/s390-d.c: Moved to...
      	* config/s390/s390-d.cc: ...here.
      	* config/s390/s390.c: Moved to...
      	* config/s390/s390.cc: ...here.
      	* config/sh/divtab-sh4-300.c: Moved to...
      	* config/sh/divtab-sh4-300.cc: ...here.
      	* config/sh/divtab-sh4.c: Moved to...
      	* config/sh/divtab-sh4.cc: ...here.
      	* config/sh/divtab.c: Moved to...
      	* config/sh/divtab.cc: ...here.
      	* config/sh/sh-c.c: Moved to...
      	* config/sh/sh-c.cc: ...here.
      	* config/sh/sh.c: Moved to...
      	* config/sh/sh.cc: ...here.
      	* config/sol2-c.c: Moved to...
      	* config/sol2-c.cc: ...here.
      	* config/sol2-cxx.c: Moved to...
      	* config/sol2-cxx.cc: ...here.
      	* config/sol2-d.c: Moved to...
      	* config/sol2-d.cc: ...here.
      	* config/sol2-stubs.c: Moved to...
      	* config/sol2-stubs.cc: ...here.
      	* config/sol2.c: Moved to...
      	* config/sol2.cc: ...here.
      	* config/sparc/driver-sparc.c: Moved to...
      	* config/sparc/driver-sparc.cc: ...here.
      	* config/sparc/sparc-c.c: Moved to...
      	* config/sparc/sparc-c.cc: ...here.
      	* config/sparc/sparc-d.c: Moved to...
      	* config/sparc/sparc-d.cc: ...here.
      	* config/sparc/sparc.c: Moved to...
      	* config/sparc/sparc.cc: ...here.
      	* config/stormy16/stormy16.c: Moved to...
      	* config/stormy16/stormy16.cc: ...here.
      	* config/tilegx/mul-tables.c: Moved to...
      	* config/tilegx/mul-tables.cc: ...here.
      	* config/tilegx/tilegx-c.c: Moved to...
      	* config/tilegx/tilegx-c.cc: ...here.
      	* config/tilegx/tilegx.c: Moved to...
      	* config/tilegx/tilegx.cc: ...here.
      	* config/tilepro/mul-tables.c: Moved to...
      	* config/tilepro/mul-tables.cc: ...here.
      	* config/tilepro/tilepro-c.c: Moved to...
      	* config/tilepro/tilepro-c.cc: ...here.
      	* config/tilepro/tilepro.c: Moved to...
      	* config/tilepro/tilepro.cc: ...here.
      	* config/v850/v850-c.c: Moved to...
      	* config/v850/v850-c.cc: ...here.
      	* config/v850/v850.c: Moved to...
      	* config/v850/v850.cc: ...here.
      	* config/vax/vax.c: Moved to...
      	* config/vax/vax.cc: ...here.
      	* config/visium/visium.c: Moved to...
      	* config/visium/visium.cc: ...here.
      	* config/vms/vms-c.c: Moved to...
      	* config/vms/vms-c.cc: ...here.
      	* config/vms/vms-f.c: Moved to...
      	* config/vms/vms-f.cc: ...here.
      	* config/vms/vms.c: Moved to...
      	* config/vms/vms.cc: ...here.
      	* config/vxworks-c.c: Moved to...
      	* config/vxworks-c.cc: ...here.
      	* config/vxworks.c: Moved to...
      	* config/vxworks.cc: ...here.
      	* config/winnt-c.c: Moved to...
      	* config/winnt-c.cc: ...here.
      	* config/xtensa/xtensa.c: Moved to...
      	* config/xtensa/xtensa.cc: ...here.
      	* context.c: Moved to...
      	* context.cc: ...here.
      	* convert.c: Moved to...
      	* convert.cc: ...here.
      	* coverage.c: Moved to...
      	* coverage.cc: ...here.
      	* cppbuiltin.c: Moved to...
      	* cppbuiltin.cc: ...here.
      	* cppdefault.c: Moved to...
      	* cppdefault.cc: ...here.
      	* cprop.c: Moved to...
      	* cprop.cc: ...here.
      	* cse.c: Moved to...
      	* cse.cc: ...here.
      	* cselib.c: Moved to...
      	* cselib.cc: ...here.
      	* ctfc.c: Moved to...
      	* ctfc.cc: ...here.
      	* ctfout.c: Moved to...
      	* ctfout.cc: ...here.
      	* data-streamer-in.c: Moved to...
      	* data-streamer-in.cc: ...here.
      	* data-streamer-out.c: Moved to...
      	* data-streamer-out.cc: ...here.
      	* data-streamer.c: Moved to...
      	* data-streamer.cc: ...here.
      	* dbgcnt.c: Moved to...
      	* dbgcnt.cc: ...here.
      	* dbxout.c: Moved to...
      	* dbxout.cc: ...here.
      	* dce.c: Moved to...
      	* dce.cc: ...here.
      	* ddg.c: Moved to...
      	* ddg.cc: ...here.
      	* debug.c: Moved to...
      	* debug.cc: ...here.
      	* df-core.c: Moved to...
      	* df-core.cc: ...here.
      	* df-problems.c: Moved to...
      	* df-problems.cc: ...here.
      	* df-scan.c: Moved to...
      	* df-scan.cc: ...here.
      	* dfp.c: Moved to...
      	* dfp.cc: ...here.
      	* diagnostic-color.c: Moved to...
      	* diagnostic-color.cc: ...here.
      	* diagnostic-show-locus.c: Moved to...
      	* diagnostic-show-locus.cc: ...here.
      	* diagnostic-spec.c: Moved to...
      	* diagnostic-spec.cc: ...here.
      	* diagnostic.c: Moved to...
      	* diagnostic.cc: ...here.
      	* dojump.c: Moved to...
      	* dojump.cc: ...here.
      	* dominance.c: Moved to...
      	* dominance.cc: ...here.
      	* domwalk.c: Moved to...
      	* domwalk.cc: ...here.
      	* double-int.c: Moved to...
      	* double-int.cc: ...here.
      	* dse.c: Moved to...
      	* dse.cc: ...here.
      	* dumpfile.c: Moved to...
      	* dumpfile.cc: ...here.
      	* dwarf2asm.c: Moved to...
      	* dwarf2asm.cc: ...here.
      	* dwarf2cfi.c: Moved to...
      	* dwarf2cfi.cc: ...here.
      	* dwarf2ctf.c: Moved to...
      	* dwarf2ctf.cc: ...here.
      	* dwarf2out.c: Moved to...
      	* dwarf2out.cc: ...here.
      	* early-remat.c: Moved to...
      	* early-remat.cc: ...here.
      	* edit-context.c: Moved to...
      	* edit-context.cc: ...here.
      	* emit-rtl.c: Moved to...
      	* emit-rtl.cc: ...here.
      	* errors.c: Moved to...
      	* errors.cc: ...here.
      	* et-forest.c: Moved to...
      	* et-forest.cc: ...here.
      	* except.c: Moved to...
      	* except.cc: ...here.
      	* explow.c: Moved to...
      	* explow.cc: ...here.
      	* expmed.c: Moved to...
      	* expmed.cc: ...here.
      	* expr.c: Moved to...
      	* expr.cc: ...here.
      	* fibonacci_heap.c: Moved to...
      	* fibonacci_heap.cc: ...here.
      	* file-find.c: Moved to...
      	* file-find.cc: ...here.
      	* file-prefix-map.c: Moved to...
      	* file-prefix-map.cc: ...here.
      	* final.c: Moved to...
      	* final.cc: ...here.
      	* fixed-value.c: Moved to...
      	* fixed-value.cc: ...here.
      	* fold-const-call.c: Moved to...
      	* fold-const-call.cc: ...here.
      	* fold-const.c: Moved to...
      	* fold-const.cc: ...here.
      	* fp-test.c: Moved to...
      	* fp-test.cc: ...here.
      	* function-tests.c: Moved to...
      	* function-tests.cc: ...here.
      	* function.c: Moved to...
      	* function.cc: ...here.
      	* fwprop.c: Moved to...
      	* fwprop.cc: ...here.
      	* gcc-ar.c: Moved to...
      	* gcc-ar.cc: ...here.
      	* gcc-main.c: Moved to...
      	* gcc-main.cc: ...here.
      	* gcc-rich-location.c: Moved to...
      	* gcc-rich-location.cc: ...here.
      	* gcc.c: Moved to...
      	* gcc.cc: ...here.
      	* gcov-dump.c: Moved to...
      	* gcov-dump.cc: ...here.
      	* gcov-io.c: Moved to...
      	* gcov-io.cc: ...here.
      	* gcov-tool.c: Moved to...
      	* gcov-tool.cc: ...here.
      	* gcov.c: Moved to...
      	* gcov.cc: ...here.
      	* gcse-common.c: Moved to...
      	* gcse-common.cc: ...here.
      	* gcse.c: Moved to...
      	* gcse.cc: ...here.
      	* genattr-common.c: Moved to...
      	* genattr-common.cc: ...here.
      	* genattr.c: Moved to...
      	* genattr.cc: ...here.
      	* genattrtab.c: Moved to...
      	* genattrtab.cc: ...here.
      	* genautomata.c: Moved to...
      	* genautomata.cc: ...here.
      	* gencfn-macros.c: Moved to...
      	* gencfn-macros.cc: ...here.
      	* gencheck.c: Moved to...
      	* gencheck.cc: ...here.
      	* genchecksum.c: Moved to...
      	* genchecksum.cc: ...here.
      	* gencodes.c: Moved to...
      	* gencodes.cc: ...here.
      	* genconditions.c: Moved to...
      	* genconditions.cc: ...here.
      	* genconfig.c: Moved to...
      	* genconfig.cc: ...here.
      	* genconstants.c: Moved to...
      	* genconstants.cc: ...here.
      	* genemit.c: Moved to...
      	* genemit.cc: ...here.
      	* genenums.c: Moved to...
      	* genenums.cc: ...here.
      	* generic-match-head.c: Moved to...
      	* generic-match-head.cc: ...here.
      	* genextract.c: Moved to...
      	* genextract.cc: ...here.
      	* genflags.c: Moved to...
      	* genflags.cc: ...here.
      	* gengenrtl.c: Moved to...
      	* gengenrtl.cc: ...here.
      	* gengtype-parse.c: Moved to...
      	* gengtype-parse.cc: ...here.
      	* gengtype-state.c: Moved to...
      	* gengtype-state.cc: ...here.
      	* gengtype.c: Moved to...
      	* gengtype.cc: ...here.
      	* genhooks.c: Moved to...
      	* genhooks.cc: ...here.
      	* genmatch.c: Moved to...
      	* genmatch.cc: ...here.
      	* genmddeps.c: Moved to...
      	* genmddeps.cc: ...here.
      	* genmddump.c: Moved to...
      	* genmddump.cc: ...here.
      	* genmodes.c: Moved to...
      	* genmodes.cc: ...here.
      	* genopinit.c: Moved to...
      	* genopinit.cc: ...here.
      	* genoutput.c: Moved to...
      	* genoutput.cc: ...here.
      	* genpeep.c: Moved to...
      	* genpeep.cc: ...here.
      	* genpreds.c: Moved to...
      	* genpreds.cc: ...here.
      	* genrecog.c: Moved to...
      	* genrecog.cc: ...here.
      	* gensupport.c: Moved to...
      	* gensupport.cc: ...here.
      	* gentarget-def.c: Moved to...
      	* gentarget-def.cc: ...here.
      	* genversion.c: Moved to...
      	* genversion.cc: ...here.
      	* ggc-common.c: Moved to...
      	* ggc-common.cc: ...here.
      	* ggc-none.c: Moved to...
      	* ggc-none.cc: ...here.
      	* ggc-page.c: Moved to...
      	* ggc-page.cc: ...here.
      	* ggc-tests.c: Moved to...
      	* ggc-tests.cc: ...here.
      	* gimple-builder.c: Moved to...
      	* gimple-builder.cc: ...here.
      	* gimple-expr.c: Moved to...
      	* gimple-expr.cc: ...here.
      	* gimple-fold.c: Moved to...
      	* gimple-fold.cc: ...here.
      	* gimple-iterator.c: Moved to...
      	* gimple-iterator.cc: ...here.
      	* gimple-laddress.c: Moved to...
      	* gimple-laddress.cc: ...here.
      	* gimple-loop-jam.c: Moved to...
      	* gimple-loop-jam.cc: ...here.
      	* gimple-low.c: Moved to...
      	* gimple-low.cc: ...here.
      	* gimple-match-head.c: Moved to...
      	* gimple-match-head.cc: ...here.
      	* gimple-pretty-print.c: Moved to...
      	* gimple-pretty-print.cc: ...here.
      	* gimple-ssa-backprop.c: Moved to...
      	* gimple-ssa-backprop.cc: ...here.
      	* gimple-ssa-evrp-analyze.c: Moved to...
      	* gimple-ssa-evrp-analyze.cc: ...here.
      	* gimple-ssa-evrp.c: Moved to...
      	* gimple-ssa-evrp.cc: ...here.
      	* gimple-ssa-isolate-paths.c: Moved to...
      	* gimple-ssa-isolate-paths.cc: ...here.
      	* gimple-ssa-nonnull-compare.c: Moved to...
      	* gimple-ssa-nonnull-compare.cc: ...here.
      	* gimple-ssa-split-paths.c: Moved to...
      	* gimple-ssa-split-paths.cc: ...here.
      	* gimple-ssa-sprintf.c: Moved to...
      	* gimple-ssa-sprintf.cc: ...here.
      	* gimple-ssa-store-merging.c: Moved to...
      	* gimple-ssa-store-merging.cc: ...here.
      	* gimple-ssa-strength-reduction.c: Moved to...
      	* gimple-ssa-strength-reduction.cc: ...here.
      	* gimple-ssa-warn-alloca.c: Moved to...
      	* gimple-ssa-warn-alloca.cc: ...here.
      	* gimple-ssa-warn-restrict.c: Moved to...
      	* gimple-ssa-warn-restrict.cc: ...here.
      	* gimple-streamer-in.c: Moved to...
      	* gimple-streamer-in.cc: ...here.
      	* gimple-streamer-out.c: Moved to...
      	* gimple-streamer-out.cc: ...here.
      	* gimple-walk.c: Moved to...
      	* gimple-walk.cc: ...here.
      	* gimple-warn-recursion.c: Moved to...
      	* gimple-warn-recursion.cc: ...here.
      	* gimple.c: Moved to...
      	* gimple.cc: ...here.
      	* gimplify-me.c: Moved to...
      	* gimplify-me.cc: ...here.
      	* gimplify.c: Moved to...
      	* gimplify.cc: ...here.
      	* godump.c: Moved to...
      	* godump.cc: ...here.
      	* graph.c: Moved to...
      	* graph.cc: ...here.
      	* graphds.c: Moved to...
      	* graphds.cc: ...here.
      	* graphite-dependences.c: Moved to...
      	* graphite-dependences.cc: ...here.
      	* graphite-isl-ast-to-gimple.c: Moved to...
      	* graphite-isl-ast-to-gimple.cc: ...here.
      	* graphite-optimize-isl.c: Moved to...
      	* graphite-optimize-isl.cc: ...here.
      	* graphite-poly.c: Moved to...
      	* graphite-poly.cc: ...here.
      	* graphite-scop-detection.c: Moved to...
      	* graphite-scop-detection.cc: ...here.
      	* graphite-sese-to-poly.c: Moved to...
      	* graphite-sese-to-poly.cc: ...here.
      	* graphite.c: Moved to...
      	* graphite.cc: ...here.
      	* haifa-sched.c: Moved to...
      	* haifa-sched.cc: ...here.
      	* hash-map-tests.c: Moved to...
      	* hash-map-tests.cc: ...here.
      	* hash-set-tests.c: Moved to...
      	* hash-set-tests.cc: ...here.
      	* hash-table.c: Moved to...
      	* hash-table.cc: ...here.
      	* hooks.c: Moved to...
      	* hooks.cc: ...here.
      	* host-default.c: Moved to...
      	* host-default.cc: ...here.
      	* hw-doloop.c: Moved to...
      	* hw-doloop.cc: ...here.
      	* hwint.c: Moved to...
      	* hwint.cc: ...here.
      	* ifcvt.c: Moved to...
      	* ifcvt.cc: ...here.
      	* inchash.c: Moved to...
      	* inchash.cc: ...here.
      	* incpath.c: Moved to...
      	* incpath.cc: ...here.
      	* init-regs.c: Moved to...
      	* init-regs.cc: ...here.
      	* input.c: Moved to...
      	* input.cc: ...here.
      	* internal-fn.c: Moved to...
      	* internal-fn.cc: ...here.
      	* intl.c: Moved to...
      	* intl.cc: ...here.
      	* ipa-comdats.c: Moved to...
      	* ipa-comdats.cc: ...here.
      	* ipa-cp.c: Moved to...
      	* ipa-cp.cc: ...here.
      	* ipa-devirt.c: Moved to...
      	* ipa-devirt.cc: ...here.
      	* ipa-fnsummary.c: Moved to...
      	* ipa-fnsummary.cc: ...here.
      	* ipa-icf-gimple.c: Moved to...
      	* ipa-icf-gimple.cc: ...here.
      	* ipa-icf.c: Moved to...
      	* ipa-icf.cc: ...here.
      	* ipa-inline-analysis.c: Moved to...
      	* ipa-inline-analysis.cc: ...here.
      	* ipa-inline-transform.c: Moved to...
      	* ipa-inline-transform.cc: ...here.
      	* ipa-inline.c: Moved to...
      	* ipa-inline.cc: ...here.
      	* ipa-modref-tree.c: Moved to...
      	* ipa-modref-tree.cc: ...here.
      	* ipa-modref.c: Moved to...
      	* ipa-modref.cc: ...here.
      	* ipa-param-manipulation.c: Moved to...
      	* ipa-param-manipulation.cc: ...here.
      	* ipa-polymorphic-call.c: Moved to...
      	* ipa-polymorphic-call.cc: ...here.
      	* ipa-predicate.c: Moved to...
      	* ipa-predicate.cc: ...here.
      	* ipa-profile.c: Moved to...
      	* ipa-profile.cc: ...here.
      	* ipa-prop.c: Moved to...
      	* ipa-prop.cc: ...here.
      	* ipa-pure-const.c: Moved to...
      	* ipa-pure-const.cc: ...here.
      	* ipa-ref.c: Moved to...
      	* ipa-ref.cc: ...here.
      	* ipa-reference.c: Moved to...
      	* ipa-reference.cc: ...here.
      	* ipa-split.c: Moved to...
      	* ipa-split.cc: ...here.
      	* ipa-sra.c: Moved to...
      	* ipa-sra.cc: ...here.
      	* ipa-utils.c: Moved to...
      	* ipa-utils.cc: ...here.
      	* ipa-visibility.c: Moved to...
      	* ipa-visibility.cc: ...here.
      	* ipa.c: Moved to...
      	* ipa.cc: ...here.
      	* ira-build.c: Moved to...
      	* ira-build.cc: ...here.
      	* ira-color.c: Moved to...
      	* ira-color.cc: ...here.
      	* ira-conflicts.c: Moved to...
      	* ira-conflicts.cc: ...here.
      	* ira-costs.c: Moved to...
      	* ira-costs.cc: ...here.
      	* ira-emit.c: Moved to...
      	* ira-emit.cc: ...here.
      	* ira-lives.c: Moved to...
      	* ira-lives.cc: ...here.
      	* ira.c: Moved to...
      	* ira.cc: ...here.
      	* jump.c: Moved to...
      	* jump.cc: ...here.
      	* langhooks.c: Moved to...
      	* langhooks.cc: ...here.
      	* lcm.c: Moved to...
      	* lcm.cc: ...here.
      	* lists.c: Moved to...
      	* lists.cc: ...here.
      	* loop-doloop.c: Moved to...
      	* loop-doloop.cc: ...here.
      	* loop-init.c: Moved to...
      	* loop-init.cc: ...here.
      	* loop-invariant.c: Moved to...
      	* loop-invariant.cc: ...here.
      	* loop-iv.c: Moved to...
      	* loop-iv.cc: ...here.
      	* loop-unroll.c: Moved to...
      	* loop-unroll.cc: ...here.
      	* lower-subreg.c: Moved to...
      	* lower-subreg.cc: ...here.
      	* lra-assigns.c: Moved to...
      	* lra-assigns.cc: ...here.
      	* lra-coalesce.c: Moved to...
      	* lra-coalesce.cc: ...here.
      	* lra-constraints.c: Moved to...
      	* lra-constraints.cc: ...here.
      	* lra-eliminations.c: Moved to...
      	* lra-eliminations.cc: ...here.
      	* lra-lives.c: Moved to...
      	* lra-lives.cc: ...here.
      	* lra-remat.c: Moved to...
      	* lra-remat.cc: ...here.
      	* lra-spills.c: Moved to...
      	* lra-spills.cc: ...here.
      	* lra.c: Moved to...
      	* lra.cc: ...here.
      	* lto-cgraph.c: Moved to...
      	* lto-cgraph.cc: ...here.
      	* lto-compress.c: Moved to...
      	* lto-compress.cc: ...here.
      	* lto-opts.c: Moved to...
      	* lto-opts.cc: ...here.
      	* lto-section-in.c: Moved to...
      	* lto-section-in.cc: ...here.
      	* lto-section-out.c: Moved to...
      	* lto-section-out.cc: ...here.
      	* lto-streamer-in.c: Moved to...
      	* lto-streamer-in.cc: ...here.
      	* lto-streamer-out.c: Moved to...
      	* lto-streamer-out.cc: ...here.
      	* lto-streamer.c: Moved to...
      	* lto-streamer.cc: ...here.
      	* lto-wrapper.c: Moved to...
      	* lto-wrapper.cc: ...here.
      	* main.c: Moved to...
      	* main.cc: ...here.
      	* mcf.c: Moved to...
      	* mcf.cc: ...here.
      	* mode-switching.c: Moved to...
      	* mode-switching.cc: ...here.
      	* modulo-sched.c: Moved to...
      	* modulo-sched.cc: ...here.
      	* multiple_target.c: Moved to...
      	* multiple_target.cc: ...here.
      	* omp-expand.c: Moved to...
      	* omp-expand.cc: ...here.
      	* omp-general.c: Moved to...
      	* omp-general.cc: ...here.
      	* omp-low.c: Moved to...
      	* omp-low.cc: ...here.
      	* omp-offload.c: Moved to...
      	* omp-offload.cc: ...here.
      	* omp-simd-clone.c: Moved to...
      	* omp-simd-clone.cc: ...here.
      	* opt-suggestions.c: Moved to...
      	* opt-suggestions.cc: ...here.
      	* optabs-libfuncs.c: Moved to...
      	* optabs-libfuncs.cc: ...here.
      	* optabs-query.c: Moved to...
      	* optabs-query.cc: ...here.
      	* optabs-tree.c: Moved to...
      	* optabs-tree.cc: ...here.
      	* optabs.c: Moved to...
      	* optabs.cc: ...here.
      	* opts-common.c: Moved to...
      	* opts-common.cc: ...here.
      	* opts-global.c: Moved to...
      	* opts-global.cc: ...here.
      	* opts.c: Moved to...
      	* opts.cc: ...here.
      	* passes.c: Moved to...
      	* passes.cc: ...here.
      	* plugin.c: Moved to...
      	* plugin.cc: ...here.
      	* postreload-gcse.c: Moved to...
      	* postreload-gcse.cc: ...here.
      	* postreload.c: Moved to...
      	* postreload.cc: ...here.
      	* predict.c: Moved to...
      	* predict.cc: ...here.
      	* prefix.c: Moved to...
      	* prefix.cc: ...here.
      	* pretty-print.c: Moved to...
      	* pretty-print.cc: ...here.
      	* print-rtl-function.c: Moved to...
      	* print-rtl-function.cc: ...here.
      	* print-rtl.c: Moved to...
      	* print-rtl.cc: ...here.
      	* print-tree.c: Moved to...
      	* print-tree.cc: ...here.
      	* profile-count.c: Moved to...
      	* profile-count.cc: ...here.
      	* profile.c: Moved to...
      	* profile.cc: ...here.
      	* read-md.c: Moved to...
      	* read-md.cc: ...here.
      	* read-rtl-function.c: Moved to...
      	* read-rtl-function.cc: ...here.
      	* read-rtl.c: Moved to...
      	* read-rtl.cc: ...here.
      	* real.c: Moved to...
      	* real.cc: ...here.
      	* realmpfr.c: Moved to...
      	* realmpfr.cc: ...here.
      	* recog.c: Moved to...
      	* recog.cc: ...here.
      	* ree.c: Moved to...
      	* ree.cc: ...here.
      	* reg-stack.c: Moved to...
      	* reg-stack.cc: ...here.
      	* regcprop.c: Moved to...
      	* regcprop.cc: ...here.
      	* reginfo.c: Moved to...
      	* reginfo.cc: ...here.
      	* regrename.c: Moved to...
      	* regrename.cc: ...here.
      	* regstat.c: Moved to...
      	* regstat.cc: ...here.
      	* reload.c: Moved to...
      	* reload.cc: ...here.
      	* reload1.c: Moved to...
      	* reload1.cc: ...here.
      	* reorg.c: Moved to...
      	* reorg.cc: ...here.
      	* resource.c: Moved to...
      	* resource.cc: ...here.
      	* rtl-error.c: Moved to...
      	* rtl-error.cc: ...here.
      	* rtl-tests.c: Moved to...
      	* rtl-tests.cc: ...here.
      	* rtl.c: Moved to...
      	* rtl.cc: ...here.
      	* rtlanal.c: Moved to...
      	* rtlanal.cc: ...here.
      	* rtlhash.c: Moved to...
      	* rtlhash.cc: ...here.
      	* rtlhooks.c: Moved to...
      	* rtlhooks.cc: ...here.
      	* rtx-vector-builder.c: Moved to...
      	* rtx-vector-builder.cc: ...here.
      	* run-rtl-passes.c: Moved to...
      	* run-rtl-passes.cc: ...here.
      	* sancov.c: Moved to...
      	* sancov.cc: ...here.
      	* sanopt.c: Moved to...
      	* sanopt.cc: ...here.
      	* sbitmap.c: Moved to...
      	* sbitmap.cc: ...here.
      	* sched-deps.c: Moved to...
      	* sched-deps.cc: ...here.
      	* sched-ebb.c: Moved to...
      	* sched-ebb.cc: ...here.
      	* sched-rgn.c: Moved to...
      	* sched-rgn.cc: ...here.
      	* sel-sched-dump.c: Moved to...
      	* sel-sched-dump.cc: ...here.
      	* sel-sched-ir.c: Moved to...
      	* sel-sched-ir.cc: ...here.
      	* sel-sched.c: Moved to...
      	* sel-sched.cc: ...here.
      	* selftest-diagnostic.c: Moved to...
      	* selftest-diagnostic.cc: ...here.
      	* selftest-rtl.c: Moved to...
      	* selftest-rtl.cc: ...here.
      	* selftest-run-tests.c: Moved to...
      	* selftest-run-tests.cc: ...here.
      	* selftest.c: Moved to...
      	* selftest.cc: ...here.
      	* sese.c: Moved to...
      	* sese.cc: ...here.
      	* shrink-wrap.c: Moved to...
      	* shrink-wrap.cc: ...here.
      	* simplify-rtx.c: Moved to...
      	* simplify-rtx.cc: ...here.
      	* sparseset.c: Moved to...
      	* sparseset.cc: ...here.
      	* spellcheck-tree.c: Moved to...
      	* spellcheck-tree.cc: ...here.
      	* spellcheck.c: Moved to...
      	* spellcheck.cc: ...here.
      	* sreal.c: Moved to...
      	* sreal.cc: ...here.
      	* stack-ptr-mod.c: Moved to...
      	* stack-ptr-mod.cc: ...here.
      	* statistics.c: Moved to...
      	* statistics.cc: ...here.
      	* stmt.c: Moved to...
      	* stmt.cc: ...here.
      	* stor-layout.c: Moved to...
      	* stor-layout.cc: ...here.
      	* store-motion.c: Moved to...
      	* store-motion.cc: ...here.
      	* streamer-hooks.c: Moved to...
      	* streamer-hooks.cc: ...here.
      	* stringpool.c: Moved to...
      	* stringpool.cc: ...here.
      	* substring-locations.c: Moved to...
      	* substring-locations.cc: ...here.
      	* symtab.c: Moved to...
      	* symtab.cc: ...here.
      	* target-globals.c: Moved to...
      	* target-globals.cc: ...here.
      	* targhooks.c: Moved to...
      	* targhooks.cc: ...here.
      	* timevar.c: Moved to...
      	* timevar.cc: ...here.
      	* toplev.c: Moved to...
      	* toplev.cc: ...here.
      	* tracer.c: Moved to...
      	* tracer.cc: ...here.
      	* trans-mem.c: Moved to...
      	* trans-mem.cc: ...here.
      	* tree-affine.c: Moved to...
      	* tree-affine.cc: ...here.
      	* tree-call-cdce.c: Moved to...
      	* tree-call-cdce.cc: ...here.
      	* tree-cfg.c: Moved to...
      	* tree-cfg.cc: ...here.
      	* tree-cfgcleanup.c: Moved to...
      	* tree-cfgcleanup.cc: ...here.
      	* tree-chrec.c: Moved to...
      	* tree-chrec.cc: ...here.
      	* tree-complex.c: Moved to...
      	* tree-complex.cc: ...here.
      	* tree-data-ref.c: Moved to...
      	* tree-data-ref.cc: ...here.
      	* tree-dfa.c: Moved to...
      	* tree-dfa.cc: ...here.
      	* tree-diagnostic.c: Moved to...
      	* tree-diagnostic.cc: ...here.
      	* tree-dump.c: Moved to...
      	* tree-dump.cc: ...here.
      	* tree-eh.c: Moved to...
      	* tree-eh.cc: ...here.
      	* tree-emutls.c: Moved to...
      	* tree-emutls.cc: ...here.
      	* tree-if-conv.c: Moved to...
      	* tree-if-conv.cc: ...here.
      	* tree-inline.c: Moved to...
      	* tree-inline.cc: ...here.
      	* tree-into-ssa.c: Moved to...
      	* tree-into-ssa.cc: ...here.
      	* tree-iterator.c: Moved to...
      	* tree-iterator.cc: ...here.
      	* tree-loop-distribution.c: Moved to...
      	* tree-loop-distribution.cc: ...here.
      	* tree-nested.c: Moved to...
      	* tree-nested.cc: ...here.
      	* tree-nrv.c: Moved to...
      	* tree-nrv.cc: ...here.
      	* tree-object-size.c: Moved to...
      	* tree-object-size.cc: ...here.
      	* tree-outof-ssa.c: Moved to...
      	* tree-outof-ssa.cc: ...here.
      	* tree-parloops.c: Moved to...
      	* tree-parloops.cc: ...here.
      	* tree-phinodes.c: Moved to...
      	* tree-phinodes.cc: ...here.
      	* tree-predcom.c: Moved to...
      	* tree-predcom.cc: ...here.
      	* tree-pretty-print.c: Moved to...
      	* tree-pretty-print.cc: ...here.
      	* tree-profile.c: Moved to...
      	* tree-profile.cc: ...here.
      	* tree-scalar-evolution.c: Moved to...
      	* tree-scalar-evolution.cc: ...here.
      	* tree-sra.c: Moved to...
      	* tree-sra.cc: ...here.
      	* tree-ssa-address.c: Moved to...
      	* tree-ssa-address.cc: ...here.
      	* tree-ssa-alias.c: Moved to...
      	* tree-ssa-alias.cc: ...here.
      	* tree-ssa-ccp.c: Moved to...
      	* tree-ssa-ccp.cc: ...here.
      	* tree-ssa-coalesce.c: Moved to...
      	* tree-ssa-coalesce.cc: ...here.
      	* tree-ssa-copy.c: Moved to...
      	* tree-ssa-copy.cc: ...here.
      	* tree-ssa-dce.c: Moved to...
      	* tree-ssa-dce.cc: ...here.
      	* tree-ssa-dom.c: Moved to...
      	* tree-ssa-dom.cc: ...here.
      	* tree-ssa-dse.c: Moved to...
      	* tree-ssa-dse.cc: ...here.
      	* tree-ssa-forwprop.c: Moved to...
      	* tree-ssa-forwprop.cc: ...here.
      	* tree-ssa-ifcombine.c: Moved to...
      	* tree-ssa-ifcombine.cc: ...here.
      	* tree-ssa-live.c: Moved to...
      	* tree-ssa-live.cc: ...here.
      	* tree-ssa-loop-ch.c: Moved to...
      	* tree-ssa-loop-ch.cc: ...here.
      	* tree-ssa-loop-im.c: Moved to...
      	* tree-ssa-loop-im.cc: ...here.
      	* tree-ssa-loop-ivcanon.c: Moved to...
      	* tree-ssa-loop-ivcanon.cc: ...here.
      	* tree-ssa-loop-ivopts.c: Moved to...
      	* tree-ssa-loop-ivopts.cc: ...here.
      	* tree-ssa-loop-manip.c: Moved to...
      	* tree-ssa-loop-manip.cc: ...here.
      	* tree-ssa-loop-niter.c: Moved to...
      	* tree-ssa-loop-niter.cc: ...here.
      	* tree-ssa-loop-prefetch.c: Moved to...
      	* tree-ssa-loop-prefetch.cc: ...here.
      	* tree-ssa-loop-split.c: Moved to...
      	* tree-ssa-loop-split.cc: ...here.
      	* tree-ssa-loop-unswitch.c: Moved to...
      	* tree-ssa-loop-unswitch.cc: ...here.
      	* tree-ssa-loop.c: Moved to...
      	* tree-ssa-loop.cc: ...here.
      	* tree-ssa-math-opts.c: Moved to...
      	* tree-ssa-math-opts.cc: ...here.
      	* tree-ssa-operands.c: Moved to...
      	* tree-ssa-operands.cc: ...here.
      	* tree-ssa-phiopt.c: Moved to...
      	* tree-ssa-phiopt.cc: ...here.
      	* tree-ssa-phiprop.c: Moved to...
      	* tree-ssa-phiprop.cc: ...here.
      	* tree-ssa-pre.c: Moved to...
      	* tree-ssa-pre.cc: ...here.
      	* tree-ssa-propagate.c: Moved to...
      	* tree-ssa-propagate.cc: ...here.
      	* tree-ssa-reassoc.c: Moved to...
      	* tree-ssa-reassoc.cc: ...here.
      	* tree-ssa-sccvn.c: Moved to...
      	* tree-ssa-sccvn.cc: ...here.
      	* tree-ssa-scopedtables.c: Moved to...
      	* tree-ssa-scopedtables.cc: ...here.
      	* tree-ssa-sink.c: Moved to...
      	* tree-ssa-sink.cc: ...here.
      	* tree-ssa-strlen.c: Moved to...
      	* tree-ssa-strlen.cc: ...here.
      	* tree-ssa-structalias.c: Moved to...
      	* tree-ssa-structalias.cc: ...here.
      	* tree-ssa-tail-merge.c: Moved to...
      	* tree-ssa-tail-merge.cc: ...here.
      	* tree-ssa-ter.c: Moved to...
      	* tree-ssa-ter.cc: ...here.
      	* tree-ssa-threadbackward.c: Moved to...
      	* tree-ssa-threadbackward.cc: ...here.
      	* tree-ssa-threadedge.c: Moved to...
      	* tree-ssa-threadedge.cc: ...here.
      	* tree-ssa-threadupdate.c: Moved to...
      	* tree-ssa-threadupdate.cc: ...here.
      	* tree-ssa-uncprop.c: Moved to...
      	* tree-ssa-uncprop.cc: ...here.
      	* tree-ssa-uninit.c: Moved to...
      	* tree-ssa-uninit.cc: ...here.
      	* tree-ssa.c: Moved to...
      	* tree-ssa.cc: ...here.
      	* tree-ssanames.c: Moved to...
      	* tree-ssanames.cc: ...here.
      	* tree-stdarg.c: Moved to...
      	* tree-stdarg.cc: ...here.
      	* tree-streamer-in.c: Moved to...
      	* tree-streamer-in.cc: ...here.
      	* tree-streamer-out.c: Moved to...
      	* tree-streamer-out.cc: ...here.
      	* tree-streamer.c: Moved to...
      	* tree-streamer.cc: ...here.
      	* tree-switch-conversion.c: Moved to...
      	* tree-switch-conversion.cc: ...here.
      	* tree-tailcall.c: Moved to...
      	* tree-tailcall.cc: ...here.
      	* tree-vect-data-refs.c: Moved to...
      	* tree-vect-data-refs.cc: ...here.
      	* tree-vect-generic.c: Moved to...
      	* tree-vect-generic.cc: ...here.
      	* tree-vect-loop-manip.c: Moved to...
      	* tree-vect-loop-manip.cc: ...here.
      	* tree-vect-loop.c: Moved to...
      	* tree-vect-loop.cc: ...here.
      	* tree-vect-patterns.c: Moved to...
      	* tree-vect-patterns.cc: ...here.
      	* tree-vect-slp-patterns.c: Moved to...
      	* tree-vect-slp-patterns.cc: ...here.
      	* tree-vect-slp.c: Moved to...
      	* tree-vect-slp.cc: ...here.
      	* tree-vect-stmts.c: Moved to...
      	* tree-vect-stmts.cc: ...here.
      	* tree-vector-builder.c: Moved to...
      	* tree-vector-builder.cc: ...here.
      	* tree-vectorizer.c: Moved to...
      	* tree-vectorizer.cc: ...here.
      	* tree-vrp.c: Moved to...
      	* tree-vrp.cc: ...here.
      	* tree.c: Moved to...
      	* tree.cc: ...here.
      	* tsan.c: Moved to...
      	* tsan.cc: ...here.
      	* typed-splay-tree.c: Moved to...
      	* typed-splay-tree.cc: ...here.
      	* ubsan.c: Moved to...
      	* ubsan.cc: ...here.
      	* valtrack.c: Moved to...
      	* valtrack.cc: ...here.
      	* value-prof.c: Moved to...
      	* value-prof.cc: ...here.
      	* var-tracking.c: Moved to...
      	* var-tracking.cc: ...here.
      	* varasm.c: Moved to...
      	* varasm.cc: ...here.
      	* varpool.c: Moved to...
      	* varpool.cc: ...here.
      	* vec-perm-indices.c: Moved to...
      	* vec-perm-indices.cc: ...here.
      	* vec.c: Moved to...
      	* vec.cc: ...here.
      	* vmsdbgout.c: Moved to...
      	* vmsdbgout.cc: ...here.
      	* vr-values.c: Moved to...
      	* vr-values.cc: ...here.
      	* vtable-verify.c: Moved to...
      	* vtable-verify.cc: ...here.
      	* web.c: Moved to...
      	* web.cc: ...here.
      	* xcoffout.c: Moved to...
      	* xcoffout.cc: ...here.
      
      gcc/c-family/ChangeLog:
      
      	* c-ada-spec.c: Moved to...
      	* c-ada-spec.cc: ...here.
      	* c-attribs.c: Moved to...
      	* c-attribs.cc: ...here.
      	* c-common.c: Moved to...
      	* c-common.cc: ...here.
      	* c-cppbuiltin.c: Moved to...
      	* c-cppbuiltin.cc: ...here.
      	* c-dump.c: Moved to...
      	* c-dump.cc: ...here.
      	* c-format.c: Moved to...
      	* c-format.cc: ...here.
      	* c-gimplify.c: Moved to...
      	* c-gimplify.cc: ...here.
      	* c-indentation.c: Moved to...
      	* c-indentation.cc: ...here.
      	* c-lex.c: Moved to...
      	* c-lex.cc: ...here.
      	* c-omp.c: Moved to...
      	* c-omp.cc: ...here.
      	* c-opts.c: Moved to...
      	* c-opts.cc: ...here.
      	* c-pch.c: Moved to...
      	* c-pch.cc: ...here.
      	* c-ppoutput.c: Moved to...
      	* c-ppoutput.cc: ...here.
      	* c-pragma.c: Moved to...
      	* c-pragma.cc: ...here.
      	* c-pretty-print.c: Moved to...
      	* c-pretty-print.cc: ...here.
      	* c-semantics.c: Moved to...
      	* c-semantics.cc: ...here.
      	* c-ubsan.c: Moved to...
      	* c-ubsan.cc: ...here.
      	* c-warn.c: Moved to...
      	* c-warn.cc: ...here.
      	* cppspec.c: Moved to...
      	* cppspec.cc: ...here.
      	* stub-objc.c: Moved to...
      	* stub-objc.cc: ...here.
      
      gcc/c/ChangeLog:
      
      	* c-aux-info.c: Moved to...
      	* c-aux-info.cc: ...here.
      	* c-convert.c: Moved to...
      	* c-convert.cc: ...here.
      	* c-decl.c: Moved to...
      	* c-decl.cc: ...here.
      	* c-errors.c: Moved to...
      	* c-errors.cc: ...here.
      	* c-fold.c: Moved to...
      	* c-fold.cc: ...here.
      	* c-lang.c: Moved to...
      	* c-lang.cc: ...here.
      	* c-objc-common.c: Moved to...
      	* c-objc-common.cc: ...here.
      	* c-parser.c: Moved to...
      	* c-parser.cc: ...here.
      	* c-typeck.c: Moved to...
      	* c-typeck.cc: ...here.
      	* gccspec.c: Moved to...
      	* gccspec.cc: ...here.
      	* gimple-parser.c: Moved to...
      	* gimple-parser.cc: ...here.
      
      gcc/cp/ChangeLog:
      
      	* call.c: Moved to...
      	* call.cc: ...here.
      	* class.c: Moved to...
      	* class.cc: ...here.
      	* constexpr.c: Moved to...
      	* constexpr.cc: ...here.
      	* cp-gimplify.c: Moved to...
      	* cp-gimplify.cc: ...here.
      	* cp-lang.c: Moved to...
      	* cp-lang.cc: ...here.
      	* cp-objcp-common.c: Moved to...
      	* cp-objcp-common.cc: ...here.
      	* cp-ubsan.c: Moved to...
      	* cp-ubsan.cc: ...here.
      	* cvt.c: Moved to...
      	* cvt.cc: ...here.
      	* cxx-pretty-print.c: Moved to...
      	* cxx-pretty-print.cc: ...here.
      	* decl.c: Moved to...
      	* decl.cc: ...here.
      	* decl2.c: Moved to...
      	* decl2.cc: ...here.
      	* dump.c: Moved to...
      	* dump.cc: ...here.
      	* error.c: Moved to...
      	* error.cc: ...here.
      	* except.c: Moved to...
      	* except.cc: ...here.
      	* expr.c: Moved to...
      	* expr.cc: ...here.
      	* friend.c: Moved to...
      	* friend.cc: ...here.
      	* g++spec.c: Moved to...
      	* g++spec.cc: ...here.
      	* init.c: Moved to...
      	* init.cc: ...here.
      	* lambda.c: Moved to...
      	* lambda.cc: ...here.
      	* lex.c: Moved to...
      	* lex.cc: ...here.
      	* mangle.c: Moved to...
      	* mangle.cc: ...here.
      	* method.c: Moved to...
      	* method.cc: ...here.
      	* name-lookup.c: Moved to...
      	* name-lookup.cc: ...here.
      	* optimize.c: Moved to...
      	* optimize.cc: ...here.
      	* parser.c: Moved to...
      	* parser.cc: ...here.
      	* pt.c: Moved to...
      	* pt.cc: ...here.
      	* ptree.c: Moved to...
      	* ptree.cc: ...here.
      	* rtti.c: Moved to...
      	* rtti.cc: ...here.
      	* search.c: Moved to...
      	* search.cc: ...here.
      	* semantics.c: Moved to...
      	* semantics.cc: ...here.
      	* tree.c: Moved to...
      	* tree.cc: ...here.
      	* typeck.c: Moved to...
      	* typeck.cc: ...here.
      	* typeck2.c: Moved to...
      	* typeck2.cc: ...here.
      	* vtable-class-hierarchy.c: Moved to...
      	* vtable-class-hierarchy.cc: ...here.
      
      gcc/fortran/ChangeLog:
      
      	* arith.c: Moved to...
      	* arith.cc: ...here.
      	* array.c: Moved to...
      	* array.cc: ...here.
      	* bbt.c: Moved to...
      	* bbt.cc: ...here.
      	* check.c: Moved to...
      	* check.cc: ...here.
      	* class.c: Moved to...
      	* class.cc: ...here.
      	* constructor.c: Moved to...
      	* constructor.cc: ...here.
      	* convert.c: Moved to...
      	* convert.cc: ...here.
      	* cpp.c: Moved to...
      	* cpp.cc: ...here.
      	* data.c: Moved to...
      	* data.cc: ...here.
      	* decl.c: Moved to...
      	* decl.cc: ...here.
      	* dependency.c: Moved to...
      	* dependency.cc: ...here.
      	* dump-parse-tree.c: Moved to...
      	* dump-parse-tree.cc: ...here.
      	* error.c: Moved to...
      	* error.cc: ...here.
      	* expr.c: Moved to...
      	* expr.cc: ...here.
      	* f95-lang.c: Moved to...
      	* f95-lang.cc: ...here.
      	* frontend-passes.c: Moved to...
      	* frontend-passes.cc: ...here.
      	* gfortranspec.c: Moved to...
      	* gfortranspec.cc: ...here.
      	* interface.c: Moved to...
      	* interface.cc: ...here.
      	* intrinsic.c: Moved to...
      	* intrinsic.cc: ...here.
      	* io.c: Moved to...
      	* io.cc: ...here.
      	* iresolve.c: Moved to...
      	* iresolve.cc: ...here.
      	* match.c: Moved to...
      	* match.cc: ...here.
      	* matchexp.c: Moved to...
      	* matchexp.cc: ...here.
      	* misc.c: Moved to...
      	* misc.cc: ...here.
      	* module.c: Moved to...
      	* module.cc: ...here.
      	* openmp.c: Moved to...
      	* openmp.cc: ...here.
      	* options.c: Moved to...
      	* options.cc: ...here.
      	* parse.c: Moved to...
      	* parse.cc: ...here.
      	* primary.c: Moved to...
      	* primary.cc: ...here.
      	* resolve.c: Moved to...
      	* resolve.cc: ...here.
      	* scanner.c: Moved to...
      	* scanner.cc: ...here.
      	* simplify.c: Moved to...
      	* simplify.cc: ...here.
      	* st.c: Moved to...
      	* st.cc: ...here.
      	* symbol.c: Moved to...
      	* symbol.cc: ...here.
      	* target-memory.c: Moved to...
      	* target-memory.cc: ...here.
      	* trans-array.c: Moved to...
      	* trans-array.cc: ...here.
      	* trans-common.c: Moved to...
      	* trans-common.cc: ...here.
      	* trans-const.c: Moved to...
      	* trans-const.cc: ...here.
      	* trans-decl.c: Moved to...
      	* trans-decl.cc: ...here.
      	* trans-expr.c: Moved to...
      	* trans-expr.cc: ...here.
      	* trans-intrinsic.c: Moved to...
      	* trans-intrinsic.cc: ...here.
      	* trans-io.c: Moved to...
      	* trans-io.cc: ...here.
      	* trans-openmp.c: Moved to...
      	* trans-openmp.cc: ...here.
      	* trans-stmt.c: Moved to...
      	* trans-stmt.cc: ...here.
      	* trans-types.c: Moved to...
      	* trans-types.cc: ...here.
      	* trans.c: Moved to...
      	* trans.cc: ...here.
      
      gcc/go/ChangeLog:
      
      	* go-backend.c: Moved to...
      	* go-backend.cc: ...here.
      	* go-lang.c: Moved to...
      	* go-lang.cc: ...here.
      	* gospec.c: Moved to...
      	* gospec.cc: ...here.
      
      gcc/jit/ChangeLog:
      
      	* dummy-frontend.c: Moved to...
      	* dummy-frontend.cc: ...here.
      	* jit-builtins.c: Moved to...
      	* jit-builtins.cc: ...here.
      	* jit-logging.c: Moved to...
      	* jit-logging.cc: ...here.
      	* jit-playback.c: Moved to...
      	* jit-playback.cc: ...here.
      	* jit-recording.c: Moved to...
      	* jit-recording.cc: ...here.
      	* jit-result.c: Moved to...
      	* jit-result.cc: ...here.
      	* jit-spec.c: Moved to...
      	* jit-spec.cc: ...here.
      	* jit-tempdir.c: Moved to...
      	* jit-tempdir.cc: ...here.
      	* jit-w32.c: Moved to...
      	* jit-w32.cc: ...here.
      	* libgccjit.c: Moved to...
      	* libgccjit.cc: ...here.
      
      gcc/lto/ChangeLog:
      
      	* common.c: Moved to...
      	* common.cc: ...here.
      	* lto-common.c: Moved to...
      	* lto-common.cc: ...here.
      	* lto-dump.c: Moved to...
      	* lto-dump.cc: ...here.
      	* lto-lang.c: Moved to...
      	* lto-lang.cc: ...here.
      	* lto-object.c: Moved to...
      	* lto-object.cc: ...here.
      	* lto-partition.c: Moved to...
      	* lto-partition.cc: ...here.
      	* lto-symtab.c: Moved to...
      	* lto-symtab.cc: ...here.
      	* lto.c: Moved to...
      	* lto.cc: ...here.
      
      gcc/objc/ChangeLog:
      
      	* objc-act.c: Moved to...
      	* objc-act.cc: ...here.
      	* objc-encoding.c: Moved to...
      	* objc-encoding.cc: ...here.
      	* objc-gnu-runtime-abi-01.c: Moved to...
      	* objc-gnu-runtime-abi-01.cc: ...here.
      	* objc-lang.c: Moved to...
      	* objc-lang.cc: ...here.
      	* objc-map.c: Moved to...
      	* objc-map.cc: ...here.
      	* objc-next-runtime-abi-01.c: Moved to...
      	* objc-next-runtime-abi-01.cc: ...here.
      	* objc-next-runtime-abi-02.c: Moved to...
      	* objc-next-runtime-abi-02.cc: ...here.
      	* objc-runtime-shared-support.c: Moved to...
      	* objc-runtime-shared-support.cc: ...here.
      
      gcc/objcp/ChangeLog:
      
      	* objcp-decl.c: Moved to...
      	* objcp-decl.cc: ...here.
      	* objcp-lang.c: Moved to...
      	* objcp-lang.cc: ...here.
      
      libcpp/ChangeLog:
      
      	* charset.c: Moved to...
      	* charset.cc: ...here.
      	* directives.c: Moved to...
      	* directives.cc: ...here.
      	* errors.c: Moved to...
      	* errors.cc: ...here.
      	* expr.c: Moved to...
      	* expr.cc: ...here.
      	* files.c: Moved to...
      	* files.cc: ...here.
      	* identifiers.c: Moved to...
      	* identifiers.cc: ...here.
      	* init.c: Moved to...
      	* init.cc: ...here.
      	* lex.c: Moved to...
      	* lex.cc: ...here.
      	* line-map.c: Moved to...
      	* line-map.cc: ...here.
      	* macro.c: Moved to...
      	* macro.cc: ...here.
      	* makeucnid.c: Moved to...
      	* makeucnid.cc: ...here.
      	* mkdeps.c: Moved to...
      	* mkdeps.cc: ...here.
      	* pch.c: Moved to...
      	* pch.cc: ...here.
      	* symtab.c: Moved to...
      	* symtab.cc: ...here.
      	* traditional.c: Moved to...
      	* traditional.cc: ...here.
      5c69acb3
  12. Jan 03, 2022
  13. May 06, 2021
    • Joseph Myers's avatar
      preprocessor: Fix pp-number lexing of digit separators [PR83873, PR97604] · 8f51cf38
      Joseph Myers authored
      When the preprocessor lexes preprocessing numbers in lex_number, it
      accepts digit separators in more cases than actually permitted in
      pp-numbers by the standard syntax.
      
      One thing this accepts is adjacent digit separators; there is some
      code to reject those later, but as noted in bug 83873 it fails to
      cover the case of adjacent digit separators within a floating-point
      exponent.  Accepting adjacent digit separators only results in a
      missing diagnostic, not in valid code being rejected or being accepted
      with incorrect semantics, because the correct lexing in such a case
      would have '' start the following preprocessing tokens, and no valid
      preprocessing token starts '' while ' isn't valid on its own as a
      preprocessing token either.  So this patch fixes that case by moving
      the error for adjacent digit separators to lex_number (allowing a more
      specific diagnostic than if '' were excluded from the pp-number
      completely).
      
      Other cases inappropriately accepted involve digit separators before
      '.', 'e+', 'e-', 'p+' or 'p-' (or corresponding uppercase variants).
      In those cases, as shown by the test digit-sep-pp-number.C added, this
      can result in valid code being wrongly rejected as a result of too
      many characters being included in the pp-number.  So this case is
      fixed by terminating the pp-number at the correct character according
      to the standard.  That test also covers the case where a digit
      separator was followed by an identifier-nondigit that is not a
      nondigit (e.g. a UCN); that case was already handled correctly.
      
      Bootstrapped with no regressions for x86_64-pc-linux-gnu.
      
      libcpp/
      	PR c++/83873
      	PR preprocessor/97604
      	* lex.c (lex_number): Reject adjacent digit separators here.  Do
      	not allow digit separators before '.' or an exponent with sign.
      	* expr.c (cpp_classify_number): Do not check for adjacent digit
      	separators here.
      
      gcc/testsuite/
      	PR c++/83873
      	PR preprocessor/97604
      	* g++.dg/cpp1y/digit-sep-neg-2.C,
      	g++.dg/cpp1y/digit-sep-pp-number.C: New tests.
      	* g++.dg/cpp1y/digit-sep-line-neg.C, g++.dg/cpp1y/digit-sep-neg.C:
      	Adjust expected messages.
      8f51cf38
  14. Feb 04, 2021
    • Jakub Jelinek's avatar
      c++, libcpp: Use make_signed_t<size_t> in the 1z diagnostics · e91f9da5
      Jakub Jelinek authored
      The following patch uses make_signed_t<size_t> instead of
      make_signed<size_t>::type in the diagnostics, because the former is shorter.
      It is true that one can't use make_signed<size_t>::type in C++11 code (which
      is why I haven't changed it in the testcase which is c++11 effective
      target), but the message talks about C++23 and make_signed_t is a C++14 and
      later feature, so I think it is fine.
      
      2021-02-04  Jakub Jelinek  <jakub@redhat.com>
      
      	* expr.c (cpp_classify_number): Use make_signed_t<size_t> instead of
      	make_signed<size_t>::type in the diagnostics.
      
      	* g++.dg/warn/Wsize_t-literals.C: Expect make_signed_t<size_t> instead
      	of make_signed<size_t>::type in the diagnostics.
      e91f9da5
  15. Feb 03, 2021
    • Ed Smith-Rowland's avatar
      c++: Implement C++23 P0330 - Literal Suffixes for ptrdiff_t and size_t. · 1f69e63c
      Ed Smith-Rowland authored
      Integer literal suffixes for signed size ('z') and unsigned size
      (some permutation od 'zu') are provided as a language addition.
      
      gcc/c-family/ChangeLog:
      
      	* c-cppbuiltin.c (c_cpp_builtins): Define __cpp_size_t_suffix.
      	* c-lex.c (interpret_integer): Set node type for size literal.
      
      libcpp/ChangeLog:
      
      	* expr.c (interpret_int_suffix): Detect 'z' integer suffix.
      	(cpp_classify_number): Compat warning for use of 'z' suffix.
      	* include/cpplib.h (struct cpp_options): New flag.
      	(enum cpp_warning_reason): New flag.
      	(CPP_N_USERDEF): Comment C++0x -> C++11.
      	(CPP_N_SIZE_T): New flag for cpp_classify_number.
      	* init.c (cpp_set_lang): Initialize new flag.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/cpp0x/udlit-shadow-neg.C: Test for 'z' and 'zu' shadowing.
      	* g++.dg/cpp23/feat-cxx2b.C: New test.
      	* g++.dg/cpp23/size_t-literals.C: New test.
      	* g++.dg/warn/Wsize_t-literals.C: New test.
      1f69e63c
  16. Jan 04, 2021
  17. Nov 24, 2020
    • Nathan Sidwell's avatar
      preprocessor: Add deferred macros · 13f93cf5
      Nathan Sidwell authored
      Deferred macros are needed for C++ modules.  Header units may export
      macro definitions and undefinitions.  These are resolved lazily at the
      point of (potential) use.  (The language specifies that, it's not just
      a useful optimization.)  Thus, identifier nodes grow a 'deferred'
      field, which fortunately doesn't expand the structure on 64-bit
      systems as there was padding there.  This is non-zero on NT_MACRO
      nodes, if the macro is deferred.  When such an identifier is lexed, it
      is resolved via a callback that I added recently.  That will either
      provide the macro definition, or discover it there was an overriding
      undef.  Either way the identifier is no longer a deferred macro.
      Notice it is now possible for NT_MACRO nodes to have a NULL macro
      expansion.
      
      	libcpp/
      	* include/cpplib.h (struct cpp_hashnode): Add deferred field.
      	(cpp_set_deferred_macro): Define.
      	(cpp_get_deferred_macro): Declare.
      	(cpp_macro_definition): Reformat, add overload.
      	(cpp_macro_definition_location): Deal with deferred macro.
      	(cpp_alloc_token_string, cpp_compare_macro): Declare.
      	* internal.h (_cpp_notify_macro_use): Return bool
      	(_cpp_maybe_notify_macro_use): Likewise.
      	* directives.c (do_undef): Check macro is not undef before
      	warning.
      	(do_ifdef, do_ifndef): Deal with deferred macro.
      	* expr.c (parse_defined): Likewise.
      	* lex.c (cpp_allocate_token_string): Break out of ...
      	(create_literal): ... here.  Call it.
      	(cpp_maybe_module_directive): Deal with deferred macro.
      	* macro.c (cpp_get_token_1): Deal with deferred macro.
      	(warn_of_redefinition): Deal with deferred macro.
      	(compare_macros): Rename to ...
      	(cpp_compare_macro): ... here.  Make extern.
      	(cpp_get_deferred_macro): New.
      	(_cpp_notify_macro_use): Deal with deferred macro, return bool
      	indicating definedness.
      	(cpp_macro_definition): Deal with deferred macro.
      13f93cf5
  18. Nov 13, 2020
    • Joseph Myers's avatar
      c: C2x binary constants · e400a649
      Joseph Myers authored
      C2x adds binary integer constants (approved at the last WG14 meeting,
      though not yet added to the working draft in git).  Configure libcpp
      to consider these a standard feature in C2x mode, with appropriate
      updates to diagnostics including support for diagnosing them with
      -std=c2x -Wc11-c2x-compat.
      
      Bootstrapped with no regressions for x86_64-pc-linux-gnu.
      
      gcc/testsuite/
      2020-11-13  Joseph Myers  <joseph@codesourcery.com>
      
      	* gcc.dg/binary-constants-2.c, gcc.dg/binary-constants-3.c,
      	gcc.dg/system-binary-constants-1.c: Update expected diagnostics.
      	* gcc.dg/c11-binary-constants-1.c,
      	gcc.dg/c11-binary-constants-2.c, gcc.dg/c2x-binary-constants-1.c,
      	gcc.dg/c2x-binary-constants-2.c, gcc.dg/c2x-binary-constants-3.c:
      	New tests.
      
      libcpp/
      2020-11-13  Joseph Myers  <joseph@codesourcery.com>
      
      	* expr.c (cpp_classify_number): Update diagnostic for binary
      	constants for C.  Also diagnose binary constants for
      	-Wc11-c2x-compat.
      	* init.c (lang_defaults): Enable binary constants for GNUC2X and
      	STDC2X.
      e400a649
  19. Nov 02, 2020
    • Nathan Sidwell's avatar
      cpplib: Macro use location and comparison · e9a2e208
      Nathan Sidwell authored
      Our macro use hook passes a location, but doesn't recieve it from the
      using location.  This patch adds the extra location_t parameter and
      passes it though.
      
      A second cleanup is breaking out the macro comparison code from the
      redefinition warning.  That;ll turn out useful for modules.
      
      Finally, there's a filename comparison needed for the location
      optimization of rewinding from line 2 (occurs during the emission of
      builtin macros).
      
      	libcpp/
      	* internal.h (_cpp_notify_macro_use): Add location parm.
      	(_cpp_maybe_notify_macro_use): Likewise.
      	* directives.c (_cpp_do_file_change): Check we've not changed file
      	when optimizing a rewind.
      	(do_ifdef): Pass location to _cpp_maybe_notify_macro_use.
      	(do_ifndef): Likewise.  Delete obsolete comment about powerpc.
      	* expr.c (parse_defined): Pass location to
      	_cpp_maybe_notify_macro_use.
      	* macro.c (enter_macro_context): Likewise.
      	(warn_of_redefinition): Break out helper function.  Call it.
      	(compare_macros): New function broken out of warn_of_redefinition.
      	(_cpp_new_macro): Zero all fields.
      	(_cpp_notify_macro_use): Add location parameter.
      e9a2e208
  20. Jan 28, 2020
    • Nathan Sidwell's avatar
      preprocessor: Make __has_include a builtin macro [PR93452] · 3d056cbf
      Nathan Sidwell authored
      The clever hack of '#define __has_include __has_include' breaks -dD
      and -fdirectives-only, because that emits definitions.  This turns
      __has_include into a proper builtin macro.  Thus it's never emitted
      via -dD, and because use outside of directive processing is undefined,
      we can just expand it anywhere.
      
      	PR preprocessor/93452
      	* internal.h (struct spec_nodes): Drop n__has_include{,_next}.
      	* directives.c (lex_macro_node): Don't check __has_include redef.
      	* expr.c (eval_token): Drop __has_include eval.
      	(parse_has_include): Move to ...
      	* macro.c (builtin_has_include): ... here.
      	(_cpp_builtin_macro_text): Eval __has_include{,_next}.
      	* include/cpplib.h (enum cpp_builtin_type): Add BT_HAS_INCLUDE{,_NEXT}.
      	* init.c (builtin_array): Add them.
      	(cpp_init_builtins): Drop __has_include{,_next} init here ...
      	* pch.c (cpp_read_state): ... and here.
      	* traditional.c (enum ls): Drop has_include states ...
      	(_cpp_scan_out_logical_line): ... and here.
      3d056cbf
  21. Jan 24, 2020
    • Nathan Sidwell's avatar
      Remove bogus __has_include controlling macro · a1f6eff2
      Nathan Sidwell authored
      I noticed, but ignored this code when addressing p80005, but having
      fixed up defined(X) on the modules branch, I could see where it came
      from, and it's obviously wrong as we've just pulled out a string
      contant from the token.
      
      	* expr.c (parse_has_include): Remove bogus controlling macro code.
      a1f6eff2
  22. Jan 20, 2020
    • Nathan Sidwell's avatar
      [PR 80005] Fix __has_include · ad1a3914
      Nathan Sidwell authored
      __has_include is funky in that it is macro-like from the POV of #ifdef and
      friends, but lexes its parenthesize argument #include-like.  We were
      failing the second part of that, because we used a forwarding macro to an
      internal name, and hence always lexed the argument in macro-parameter
      context.  We componded that by not setting the right flag when lexing, so
      it didn't even know.  Mostly users got lucky.
      
      This reimplements the handline.
      1) Remove the forwarding, but declare object-like macros that
      expand to themselves.  This satisfies the #ifdef requirement
      
      2) Correctly set angled_brackets when lexing the parameter.  This tells
      the lexer (a) <...> is a header name and (b) "..." is too (not a string).
      
      3) Remove the in__has_include lexer state, just tell find_file that that's
      what's happenning, so it doesn't emit an error.
      
      We lose the (undocumented) ability to #undef __has_include.  That may well
      have been an accident of implementation.  There are no tests for it.
      
      We gain __has_include behaviour for all users of the preprocessors -- not
      just the C-family ones that defined a forwarding macro.
      
      	libcpp/
      	PR preprocessor/80005
      	* include/cpplib.h (BT_HAS_ATTRIBUTE): Fix comment.
      	* internal.h (struct lexer_state): Delete in__has_include field.
      	(struct spec_nodes): Rename n__has_include{,_next}__ fields.
      	(_cpp_defined_macro_p): New.
      	(_cpp_find_file): Add has_include parm.
      	* directives.c (lex_macro_node): Combine defined,
      	__has_inline{,_next} checking.
      	(do_ifdef, do_ifndef): Use _cpp_defined_macro_p.
      	(_cpp_init_directives): Refactor.
      	* expr.c (parse_defined): Use _cpp_defined_macro_p.
      	(eval_token): Adjust parse_has_include calls.
      	(parse_has_include): Add OP parameter.  Reimplement.
      	* files.c (_cpp_find_file): Add HAS_INCLUDE parm.  Use it to
      	inhibit error message.
      	(_cpp_stack_include): Adjust _cpp_find_file call.
      	(_cpp_fake_include, _cpp_compare_file_date): Likewise.
      	(open_file_failed): Remove in__has_include check.
      	(_cpp_has_header): Adjust _cpp_find_file call.
      	* identifiers.c (_cpp_init_hashtable): Don't init
      	__has_include{,_next} here ...
      	* init.c (cpp_init_builtins): ... init them here.  Define as
      	macros.
      	(cpp_read_main_file): Adjust _cpp_find_file call.
      	* pch.c (cpp_read_state): Adjust __has_include{,_next} access.
      	* traditional.c (_cpp_scan_out_locgical_line): Likewise.
      
      	gcc/c-family/
      	PR preprocessor/80005
      	* c-cppbuiltins.c (c_cpp_builtins): Don't define __has_include{,_next}.
      
      	gcc/testsuite/
      	PR preprocessor/80005
      	* g++.dg/cpp1y/feat-cxx14.C: Adjust.
      	* g++.dg/cpp1z/feat-cxx17.C: Adjust.
      	* g++.dg/cpp2a/feat-cxx2a.C: Adjust.
      	* g++.dg/cpp/pr80005.C: New.
      ad1a3914
  23. Jan 17, 2020
    • Nathan Sidwell's avatar
      [PR93306] Short-circuit has_include · bf09d886
      Nathan Sidwell authored
      the preprocessor evaluator has a skip_eval counter, but we weren't
      checking it after parsing has_include(foo), but before looking for
      foo.  Resulting in unnecessary io for 'FALSE_COND && has_include <foo>'
      
      	PR preprocessor/93306
      	* expr.c (parse_has_include): Refactor.  Check skip_eval before
      	looking.
      bf09d886
  24. Jan 01, 2020
  25. Oct 11, 2019
    • Joseph Myers's avatar
      Support decimal floating-point constants in C2x. · 175a85b2
      Joseph Myers authored
      ISO C2x adds decimal floating point as an optional standard feature.
      This patch accordingly makes GCC accept DFP constants (DF, DD, DL, df,
      dd, dl suffixes) in strict C2X mode, with a pedwarn-if-pedantic for
      older standards and a warning with -Wc11-c2x-compat even in C2x mode
      (which in turn requires -Wc11-c2x-compat to be newly passed through to
      libcpp).
      
      Bootstrapped with no regressions on x86_64-pc-linux-gnu.
      
      gcc/c-family:
      	* c.opt (Wc11-c2x-compat): Add CPP(cpp_warn_c11_c2x_compat)
      	CppReason(CPP_W_C11_C2X_COMPAT).
      
      gcc/testsuite:
      	* gcc.dg/dfp/c11-constants-1.c, gcc.dg/dfp/c11-constants-2.c,
      	gcc.dg/dfp/c2x-constants-1.c, gcc.dg/dfp/c2x-constants-2.c: New
      	tests.
      	* gcc.dg/dfp/constants-pedantic.c: Use -std=gnu17 explicitly.
      	Update expected diagnostics.
      
      libcpp:
      	* include/cpplib.h (struct cpp_options): Add dfp_constants and
      	cpp_warn_c11_c2x_compat.
      	(enum cpp_warning_reason): Add CPP_W_C11_C2X_COMPAT.
      	* init.c (struct lang_flags): Add dfp_constants.
      	(lang_defaults): Set dfp_constants to 1 for GNUC2X and STDC2X and
      	0 for other languages.
      	(cpp_set_lang): Set dfp_constants from language.
      	(cpp_create_reader): Set cpp_warn_c11_c2x_compat to -1.
      	* expr.c (interpret_float_suffix): Mention DFP constants as C2X in
      	comment.
      	(cpp_classify_number): Do not diagnose DFP constants for languages
      	setting dfp_constants, unless cpp_warn_c11_c2x_compat.
      
      From-SVN: r276908
      175a85b2
  26. Sep 03, 2019
  27. Jan 26, 2019
  28. Jan 01, 2019
  29. Nov 13, 2018
    • David Malcolm's avatar
      Eliminate source_location in favor of location_t · 620e594b
      David Malcolm authored
      Historically GCC used location_t, while libcpp used source_location.
      
      This inconsistency has been annoying me for a while, so this patch
      removes source_location in favor of location_t throughout
      (as the latter is shorter).
      
      gcc/ChangeLog:
      	* builtins.c: Replace "source_location" with "location_t".
      	* diagnostic-show-locus.c: Likewise.
      	* diagnostic.c: Likewise.
      	* dumpfile.c: Likewise.
      	* gcc-rich-location.h: Likewise.
      	* genmatch.c: Likewise.
      	* gimple.h: Likewise.
      	* gimplify.c: Likewise.
      	* input.c: Likewise.
      	* input.h: Likewise.  Eliminate the typedef.
      	* omp-expand.c: Likewise.
      	* selftest.h: Likewise.
      	* substring-locations.h (get_source_location_for_substring):
      	Rename to..
      	(get_location_within_string): ...this.
      	* tree-cfg.c: Replace "source_location" with "location_t".
      	* tree-cfgcleanup.c: Likewise.
      	* tree-diagnostic.c: Likewise.
      	* tree-into-ssa.c: Likewise.
      	* tree-outof-ssa.c: Likewise.
      	* tree-parloops.c: Likewise.
      	* tree-phinodes.c: Likewise.
      	* tree-phinodes.h: Likewise.
      	* tree-ssa-loop-ivopts.c: Likewise.
      	* tree-ssa-loop-manip.c: Likewise.
      	* tree-ssa-phiopt.c: Likewise.
      	* tree-ssa-phiprop.c: Likewise.
      	* tree-ssa-threadupdate.c: Likewise.
      	* tree-ssa.c: Likewise.
      	* tree-ssa.h: Likewise.
      	* tree-vect-loop-manip.c: Likewise.
      
      gcc/c-family/ChangeLog:
      	* c-common.c (c_get_substring_location): Update for renaming of
      	get_source_location_for_substring to get_location_within_string.
      	* c-lex.c: Replace "source_location" with "location_t".
      	* c-opts.c: Likewise.
      	* c-ppoutput.c: Likewise.
      
      gcc/c/ChangeLog:
      	* c-decl.c: Replace "source_location" with "location_t".
      	* c-tree.h: Likewise.
      	* c-typeck.c: Likewise.
      	* gimple-parser.c: Likewise.
      
      gcc/cp/ChangeLog:
      	* call.c: Replace "source_location" with "location_t".
      	* cp-tree.h: Likewise.
      	* cvt.c: Likewise.
      	* name-lookup.c: Likewise.
      	* parser.c: Likewise.
      	* typeck.c: Likewise.
      
      gcc/fortran/ChangeLog:
      	* cpp.c: Replace "source_location" with "location_t".
      	* gfortran.h: Likewise.
      
      gcc/go/ChangeLog:
      	* go-gcc-diagnostics.cc: Replace "source_location" with "location_t".
      	* go-gcc.cc: Likewise.
      	* go-linemap.cc: Likewise.
      	* go-location.h: Likewise.
      	* gofrontend/README: Likewise.
      
      gcc/jit/ChangeLog:
      	* jit-playback.c: Replace "source_location" with "location_t".
      
      gcc/testsuite/ChangeLog:
      	* g++.dg/plugin/comment_plugin.c: Replace "source_location" with
      	"location_t".
      	* gcc.dg/plugin/diagnostic_plugin_test_show_locus.c: Likewise.
      
      libcc1/ChangeLog:
      	* libcc1plugin.cc: Replace "source_location" with "location_t".
      	(plugin_context::get_source_location): Rename to...
      	(plugin_context::get_location_t): ...this.
      	* libcp1plugin.cc: Likewise.
      
      libcpp/ChangeLog:
      	* charset.c: Replace "source_location" with "location_t".
      	* directives-only.c: Likewise.
      	* directives.c: Likewise.
      	* errors.c: Likewise.
      	* expr.c: Likewise.
      	* files.c: Likewise.
      	* include/cpplib.h: Likewise.  Rename MAX_SOURCE_LOCATION to
      	MAX_LOCATION_T.
      	* include/line-map.h: Likewise.
      	* init.c: Likewise.
      	* internal.h: Likewise.
      	* lex.c: Likewise.
      	* line-map.c: Likewise.
      	* location-example.txt: Likewise.
      	* macro.c: Likewise.
      	* pch.c: Likewise.
      	* traditional.c: Likewise.
      
      From-SVN: r266085
      620e594b
  30. Aug 16, 2018
    • Nathan Sidwell's avatar
      [PATCH] CPP Macro predicates · 3f6677f4
      Nathan Sidwell authored
      https://gcc.gnu.org/ml/gcc-patches/2018-08/msg00897.html
      	libcpp/
      	* include/cpplib.h (cpp_user_macro_p, cpp_builtin_macro_p)
      	(cpp_macro_p): New inlines.
      	* directives.c (do_pragma_poison): Use cpp_macro_p.
      	(do_ifdef, do_ifndef): Likewise.  Use _cpp_maybe_notify_macro_use.
      	(cpp_pop_definition): Use cpp_macro_p.  Move _cpp_free_definition
      	earlier.  Don't zap node directly.
      	* expr.c (parse_defined): Use _cpp_maybe_notify_macro_use &
      	cpp_macro_p.
      	* files.c (should_stack_file): Use cpp_macro_p.
      	* identifiers.c (cpp_defined): Likewise.
      	* internal.h (_cpp_mark_macro): Use cpp_user_macro_p.
      	(_cpp_notify_macro_use): Declare.
      	(_cpp_maybe_notify_macro_use): New inline.
      	* lex.c (is_macro): Use cpp_macro_p.
      	* macro.c (_cpp_warn_if_unused_macro): Use cpp_user_macro_p.
      	(enter_macro_context): Likewise.
      	(_cpp_create_definition): Use cpp_builtin_macro_p,
      	cpp_user_macro_p.  Move _cpp_free_definition earlier.
      	(_cpp_notify_macro_use): New, broken out of multiple call sites.
      	* traditional.c (fun_like_macro_p): Use cpp_builtin_macro_p.
      	(maybe_start_funlike, _cpp_scan_out_logical_line)
      	(push_replacement_text): Likewise.
      	gcc/c-family/
      	* c-ada-spec.c (count_ada_macro): Use cpp_user_macro_p.
      	(store_ada_macro): Likewise.
      	* c-ppoutput.c (cb_used_define, dump_macro): Likewise.
      	* c-spellcheck.cc (should-suggest_as_macro_p): Likewise,
      	gcc/
      	* config/rs6000/rs6000-c.c (rs6000_macro_to_expend): Use cpp_macro_p.
      	* config/powerpcspc/powerpcspe-c.c (rs6000_macro_to_expend): Likewise.
      	gcc/cp/
      	* name-lookup.c (lookup_name_fuzzy): Likewise.
      	gcc/fortran/
      	* cpp.c (dump_macro): Use cpp_user_macro_p.
      
      From-SVN: r263587
      3f6677f4
  31. Jan 03, 2018
  32. Dec 05, 2017
  33. Dec 01, 2017
  34. Sep 15, 2017
    • Jakub Jelinek's avatar
      invoke.texi: Document -std=c++17 and -std=gnu++17 and document c++1z and gnu++1z as deprecated. · 7b936140
      Jakub Jelinek authored
      	* doc/invoke.texi: Document -std=c++17 and -std=gnu++17 and document
      	c++1z and gnu++1z as deprecated.  Change other references to
      	-std=c++1z to -std=c++17 and -std=gnu++1z to -std=gnu++17.
      	Change -Wc++1z-compat to -Wc++17-compat.
      	* doc/cpp.texi: Document -std=c++17 defines __cplusplus 201703L.
      	* dwarf2out.c (highest_c_language): Handle C++17.
      	(gen_compile_unit_die): Likewise.
      c-family/
      	* c.opt (Wc++1z-compat): Change from option to undocumented alias.
      	(Wc++17-compat): Change from undocumented alias to option.
      	(Wnoexcept-type): Enable by Wc++17-compat instead of Wc++1z-compat,
      	change C++1z to C++17 in description.
      	(std=c++1z, std=gnu++1z): Change from option to undocumented
      	deprecated alias.
      	(std=c++17, std=gnu++17): Change from undocumented alias to option.
      	Adjust description.
      	* c-common.h (enum cxx_dialect): Rename cxx1z to cxx17.
      	* c-opts.c (set_std_cxx1z): Rename to ...
      	(set_std_cxx17): ... this.
      	(c_common_handle_option): Rename OPT_std_c__1z to OPT_std_c__17
      	and OPT_std_gnu__1z to OPT_std_gnu__17.  Adjust set_std_cxx1z
      	caller.  
      	(c_common_post_options): Use cxx17 instead of cxx1z.  Adjust
      	comments.
      cp/
      	* decl.c (redeclaration_error_message): Use cxx17 instead of cxx1z,
      	adjust diagnostics refering to C++1z or -std=gnu++1z or -std=c++1z
      	to C++17 or -std=gnu++17 or -std=c++17.  Adjust comments.
      	(cxx_init_decl_processing, next_initializable_field,
      	is_direct_enum_init, check_initializer, cp_finish_decl,
      	mark_inline_variable, grokdeclarator, grokparms, xref_basetypes,
      	finish_function): Likewise.
      	* cp-tree.h (DECL_INLINE_VAR_P): Likewise.
      	* pt.c (mark_template_parm, convert_nontype_argument,
      	instantiate_class_template_1, type_unification_real, unify,
      	get_partial_spec_bindings, dependent_type_p_r): Likewise.
      	* typeck.c (cp_build_unary_op): Likewise.
      	* constexpr.c (var_in_maybe_constexpr_fn): Likewise.
      	* call.c (build_user_type_conversion_1, build_over_call,
      	build_special_member_call): Likewise.
      	* lambda.c (begin_lambda_type): Likewise.
      	* typeck2.c (process_init_constructor_record): Likewise.
      	* class.c (build_base_field, finalize_literal_type_property,
      	explain_non_literal_class): Likewise.
      	* parser.c (cp_parser_diagnose_invalid_type_name,
      	cp_parser_primary_expression, cp_parser_lambda_introducer,
      	cp_parser_lambda_declarator_opt, cp_parser_selection_statement,
      	cp_convert_range_for, cp_parser_perform_range_for_lookup,
      	cp_parser_decomposition_declaration, cp_parser_linkage_specification,
      	cp_parser_static_assert, cp_parser_simple_type_specifier,
      	cp_parser_namespace_definition, cp_parser_using_declaration,
      	cp_parser_init_declarator, cp_parser_type_parameter_key,
      	cp_parser_exception_specification_opt, cp_parser_std_attribute_spec,
      	cp_parser_constructor_declarator_p): Likewise.
      	* mangle.c (struct globals): Rename need_cxx1z_warning to
      	need_cxx17_warning.
      	(write_exception_spec, start_mangling, mangle_decl): Likewise.
      	* Make-lang.in (check-c++1z): Rename to check-c++17, depend on
      	it.
      	(check-c++17): New goal.  Use 17 instead of 1z.
      	(check-c++-all): Use 17 instead of 1z.
      testsuite/
      	* lib/g++-dg.exp (g++-dg-runtest): Use 17 instead of 1z.
      	* lib/target-supports.exp (check_effective_target_c++14): Use
      	check_effective_target_c++17 instead of check_effective_target_c++1z.
      	(check_effective_target_c++14_down): Likewise.
      	(check_effective_target_c++1z_only): Rename to ...
      	(check_effective_target_c++17_only): ... this.
      	(check_effective_target_c++1z): Rename to ...
      	(check_effective_target_c++17): ... this.
      	* g++.dg/debug/dwarf2/inline-var-1.C: Use -std=c++17 or -std=gnu++17
      	instead of -std=c++1z or -std=gnu++1z.  Use c++17 instead of c++1z
      	and c++17_only instead of c++1z_only.  Adjust expected diagnostics
      	and comments refering to 1z to 17.
      	* g++.dg/debug/dwarf2/inline-var-2.C: Likewise.
      	* g++.dg/template/partial5.C: Likewise.
      	* g++.dg/template/nontype8.C: Likewise.
      	* g++.dg/cpp1z/noexcept-type5.C: Likewise.
      	* g++.dg/cpp1z/nontype3a.C: Likewise.
      	* g++.dg/cpp1z/constexpr-lambda4.C: Likewise.
      	* g++.dg/cpp1z/noexcept-type16.C: Likewise.
      	* g++.dg/cpp1z/class-deduction32.C: Likewise.
      	* g++.dg/cpp1z/pr78771.C: Likewise.
      	* g++.dg/cpp1z/elide1.C: Likewise.
      	* g++.dg/cpp1z/fold3.C: Likewise.
      	* g++.dg/cpp1z/class-deduction2.C: Likewise.
      	* g++.dg/cpp1z/noexcept-type12.C: Likewise.
      	* g++.dg/cpp1z/inline-var2.C: Likewise.
      	* g++.dg/cpp1z/eval-order2.C: Likewise.
      	* g++.dg/cpp1z/decomp21.C: Likewise.
      	* g++.dg/cpp1z/constexpr-lambda11.C: Likewise.
      	* g++.dg/cpp1z/constexpr-lambda9.C: Likewise.
      	* g++.dg/cpp1z/utf8-neg.C: Likewise.
      	* g++.dg/cpp1z/class-deduction41.C: Likewise.
      	* g++.dg/cpp1z/class-deduction23.C: Likewise.
      	* g++.dg/cpp1z/nodiscard3.C: Likewise.
      	* g++.dg/cpp1z/static_assert-nomsg.C: Likewise.
      	* g++.dg/cpp1z/noexcept-type9.C: Likewise.
      	* g++.dg/cpp1z/class-deduction21.C: Likewise.
      	* g++.dg/cpp1z/range-for1.C: Likewise.
      	* g++.dg/cpp1z/init-statement4.C: Likewise.
      	* g++.dg/cpp1z/udlit-utf8char.C: Likewise.
      	* g++.dg/cpp1z/decomp30.C: Likewise.
      	* g++.dg/cpp1z/class-deduction39.C: Likewise.
      	* g++.dg/cpp1z/register2.C: Likewise.
      	* g++.dg/cpp1z/decomp9.C: Likewise.
      	* g++.dg/cpp1z/regress1.C: Likewise.
      	* g++.dg/cpp1z/direct-enum-init1.C: Likewise.
      	* g++.dg/cpp1z/class-deduction30.C: Likewise.
      	* g++.dg/cpp1z/abbrev2.C: Likewise.
      	* g++.dg/cpp1z/nontype-auto6.C: Likewise.
      	* g++.dg/cpp1z/regress2.C: Likewise.
      	* g++.dg/cpp1z/decomp16.C: Likewise.
      	* g++.dg/cpp1z/bool-increment1.C: Likewise.
      	* g++.dg/cpp1z/aligned-new1.C: Likewise.
      	* g++.dg/cpp1z/decomp3.C: Likewise.
      	* g++.dg/cpp1z/register1.C: Likewise.
      	* g++.dg/cpp1z/namespace-attribs.C: Likewise.
      	* g++.dg/cpp1z/class-deduction1.C: Likewise.
      	* g++.dg/cpp1z/decomp10.C: Likewise.
      	* g++.dg/cpp1z/constexpr-if11.C: Likewise.
      	* g++.dg/cpp1z/constexpr-lambda10.C: Likewise.
      	* g++.dg/cpp1z/decomp27.C: Likewise.
      	* g++.dg/cpp1z/noexcept-type2.C: Likewise.
      	* g++.dg/cpp1z/constexpr-lambda6.C: Likewise.
      	* g++.dg/cpp1z/class-deduction9.C: Likewise.
      	* g++.dg/cpp1z/attributes-enum-1.C: Likewise.
      	* g++.dg/cpp1z/decomp11.C: Likewise.
      	* g++.dg/cpp1z/aligned-new3.C: Likewise.
      	* g++.dg/cpp1z/utf8-2.C: Likewise.
      	* g++.dg/cpp1z/lambda-this3.C: Likewise.
      	* g++.dg/cpp1z/decomp-constexpr1.C: Likewise.
      	* g++.dg/cpp1z/byte1.C: Likewise.
      	* g++.dg/cpp1z/nontype-auto9.C: Likewise.
      	* g++.dg/cpp1z/aggr-base4.C: Likewise.
      	* g++.dg/cpp1z/constexpr-lambda1.C: Likewise.
      	* g++.dg/cpp1z/nontype-auto3.C: Likewise.
      	* g++.dg/cpp1z/utf8-2a.C: Likewise.
      	* g++.dg/cpp1z/constexpr-lambda7.C: Likewise.
      	* g++.dg/cpp1z/aggr-base6.C: Likewise.
      	* g++.dg/cpp1z/cplusplus.C: Likewise.
      	* g++.dg/cpp1z/class-deduction20.C: Likewise.
      	* g++.dg/cpp1z/aggr-base2.C: Likewise.
      	* g++.dg/cpp1z/class-deduction6.C: Likewise.
      	* g++.dg/cpp1z/noexcept-type3.C: Likewise.
      	* g++.dg/cpp1z/class-deduction31.C: Likewise.
      	* g++.dg/cpp1z/class-deduction25.C: Likewise.
      	* g++.dg/cpp1z/class-deduction18.C: Likewise.
      	* g++.dg/cpp1z/fold9.C: Likewise.
      	* g++.dg/cpp1z/noexcept-type8.C: Likewise.
      	* g++.dg/cpp1z/abbrev1.C: Likewise.
      	* g++.dg/cpp1z/constexpr-if10.C: Likewise.
      	* g++.dg/cpp1z/utf8.C: Likewise.
      	* g++.dg/cpp1z/noexcept-type7.C: Likewise.
      	* g++.dg/cpp1z/aggr-base3.C: Likewise.
      	* g++.dg/cpp1z/constexpr-lambda8.C: Likewise.
      	* g++.dg/cpp1z/init-statement2.C: Likewise.
      	* g++.dg/cpp1z/nontype-auto4.C: Likewise.
      	* g++.dg/cpp1z/constexpr-if12.C: Likewise.
      	* g++.dg/cpp1z/class-deduction40.C: Likewise.
      	* g++.dg/cpp1z/nontype3.C: Likewise.
      	* g++.dg/cpp1z/class-deduction14.C: Likewise.
      	* g++.dg/cpp1z/fold7.C: Likewise.
      	* g++.dg/cpp1z/nontype2.C: Likewise.
      	* g++.dg/cpp1z/class-deduction15.C: Likewise.
      	* g++.dg/cpp1z/nested-namespace-def1.C: Likewise.
      	* g++.dg/cpp1z/class-deduction13.C: Likewise.
      	* g++.dg/cpp1z/aligned-new7.C: Likewise.
      	* g++.dg/cpp1z/noexcept-type1.C: Likewise.
      	* g++.dg/cpp1z/nontype1.C: Likewise.
      	* g++.dg/cpp1z/init-statement5.C: Likewise.
      	* g++.dg/cpp1z/nontype-auto2.C: Likewise.
      	* g++.dg/cpp1z/decomp17.C: Likewise.
      	* g++.dg/cpp1z/fold4.C: Likewise.
      	* g++.dg/cpp1z/constexpr-lambda2.C: Likewise.
      	* g++.dg/cpp1z/fold7a.C: Likewise.
      	* g++.dg/cpp1z/nontype-auto5.C: Likewise.
      	* g++.dg/cpp1z/init-statement7.C: Likewise.
      	* g++.dg/cpp1z/aggr-base5.C: Likewise.
      	* g++.dg/cpp1z/constexpr-lambda5.C: Likewise.
      	* g++.dg/cpp1z/pr79143.C: Likewise.
      	* g++.dg/cpp1z/class-deduction38.C: Likewise.
      	* g++.dg/cpp1z/nontype-auto8.C: Likewise.
      	* g++.dg/cpp1z/class-deduction12.C: Likewise.
      	* g++.dg/cpp1z/decomp20.C: Likewise.
      	* g++.dg/cpp1z/class-deduction22.C: Likewise.
      	* g++.dg/cpp1z/class-deduction29.C: Likewise.
      	* g++.dg/cpp1z/class-deduction8.C: Likewise.
      	* g++.dg/cpp1z/class-deduction43.C: Likewise.
      	* g++.dg/cpp1z/feat-cxx1z.C: Likewise.
      	* g++.dg/cpp1z/fold8.C: Likewise.
      	* g++.dg/cpp1z/init-statement3.C: Likewise.
      	* g++.dg/cpp1z/nontype-auto10.C: Likewise.
      	* g++.dg/cpp1z/class-deduction36.C: Likewise.
      	* g++.dg/cpp1z/noexcept-type17.C: Likewise.
      	* g++.dg/cpp1z/fallthrough1.C: Likewise.
      	* g++.dg/cpp1z/fold1.C: Likewise.
      	* g++.dg/cpp1z/class-deduction26.C: Likewise.
      	* g++.dg/cpp1z/fold-ice1.C: Likewise.
      	* g++.dg/cpp1z/fold5.C: Likewise.
      	* g++.dg/cpp1z/class-deduction34.C: Likewise.
      	* g++.dg/cpp1z/noexcept-type6.C: Likewise.
      	* g++.dg/cpp1z/class-deduction7.C: Likewise.
      	* g++.dg/cpp1z/class-deduction16.C: Likewise.
      	* g++.dg/cpp1z/class-deduction10.C: Likewise.
      	* g++.dg/cpp1z/eval-order3.C: Likewise.
      	* g++.dg/cpp1z/constexpr-lambda13.C: Likewise.
      	* g++.dg/cpp1z/aggr-base2a.C: Likewise.
      	* g++.dg/cpp1z/nontype-auto1.C: Likewise.
      	* g++.dg/cpp1z/constexpr-lambda3.C: Likewise.
      	* g++.dg/cpp1z/nontype-auto7.C: Likewise.
      	* g++.dg/cpp1z/decomp15.C: Likewise.
      	* g++.dg/cpp1z/noexcept-type4.C: Likewise.
      	* g++.dg/cpp1z/fold-mangle.C: Likewise.
      	* g++.dg/cpp1z/class-deduction35.C: Likewise.
      	* g++.dg/cpp1z/decomp4.C: Likewise.
      	* g++.dg/cpp1z/class-deduction42.C: Likewise.
      	* g++.dg/cpp1z/init-statement8.C: Likewise.
      	* g++.dg/cpp1z/inline-var1a.C: Likewise.
      	* g++.dg/cpp1z/init-statement6.C: Likewise.
      	* g++.dg/cpp1z/class-deduction17.C: Likewise.
      	* g++.dg/cpp1z/class-deduction28.C: Likewise.
      	* g++.dg/cpp1z/class-deduction27.C: Likewise.
      	* g++.dg/cpp1z/decomp-bitfield1.C: Likewise.
      	* g++.dg/cpp1z/attributes-enum-1a.C: Likewise.
      	* g++.dg/cpp1z/class-deduction11.C: Likewise.
      	* g++.dg/cpp1z/constexpr-lambda12.C: Likewise.
      	* g++.dg/cpp1z/init-statement9.C: Likewise.
      	* g++.dg/cpp1z/class-deduction19.C: Likewise.
      	* g++.dg/cpp1z/class-deduction5.C: Likewise.
      	* g++.dg/cpp1z/fold2.C: Likewise.
      	* g++.dg/cpp1z/class-deduction33.C: Likewise.
      	* g++.dg/cpp1z/class-deduction24.C: Likewise.
      	* g++.dg/cpp1z/aggr-base1.C: Likewise.
      	* g++.dg/cpp1z/fold6.C: Likewise.
      	* g++.dg/cpp1z/decomp12.C: Likewise.
      	* g++.dg/cpp1z/class-deduction4.C: Likewise.
      	* g++.dg/cpp1z/inline-var1.C: Likewise.
      	* g++.dg/cpp1z/aligned-new2.C: Likewise.
      	* g++.dg/cpp1z/class-deduction3.C: Likewise.
      	* g++.dg/other/error3.C: Likewise.
      	* g++.dg/init/new25.C: Likewise.
      	* g++.dg/init/new13.C: Likewise.
      	* g++.dg/tls/diag-2.C: Likewise.
      	* g++.dg/tls/diag-4.C: Likewise.
      	* g++.dg/opt/noreturn-1.C: Likewise.
      	* g++.dg/eh/async-unwind2.C: Likewise.
      	* g++.dg/eh/spec9.C: Likewise.
      	* g++.dg/eh/spec7.C: Likewise.
      	* g++.dg/eh/template1.C: Likewise.
      	* g++.dg/eh/cond4.C: Likewise.
      	* g++.dg/eh/pr41819.C: Likewise.
      	* g++.dg/eh/delete1.C: Likewise.
      	* g++.dg/eh/spec3.C: Likewise.
      	* g++.dg/eh/forced4.C: Likewise.
      	* g++.dg/eh/spec2.C: Likewise.
      	* g++.dg/eh/shadow1.C: Likewise.
      	* g++.dg/eh/pr38662.C: Likewise.
      	* g++.dg/eh/ehopt1.C: Likewise.
      	* g++.dg/eh/spec8.C: Likewise.
      	* g++.dg/eh/init-temp2.C: Likewise.
      	* g++.dg/rtti/crash3.C: Likewise.
      	* g++.dg/warn/Wreturn-type-3.C: Likewise.
      	* g++.dg/warn/register-parm-1.C: Likewise.
      	* g++.dg/warn/register-var-2.C: Likewise.
      	* g++.dg/gcov/gcov-7.C: Likewise.
      	* g++.dg/tree-ssa/pr45605.C: Likewise.
      	* g++.dg/cpp/pr23827_cxx98_neg.C: Likewise.
      	* g++.dg/lookup/exception1.C: Likewise.
      	* g++.dg/ubsan/pr79589.C: Likewise.
      	* g++.dg/tm/pr47340.C: Likewise.
      	* g++.dg/tm/pr46567.C: Likewise.
      	* g++.dg/expr/bitfield5.C: Likewise.
      	* g++.dg/expr/bool1.C: Likewise.
      	* g++.dg/expr/lval3.C: Likewise.
      	* g++.dg/expr/lval4.C: Likewise.
      	* g++.dg/expr/bitfield4.C: Likewise.
      	* g++.dg/expr/bitfield6.C: Likewise.
      	* g++.dg/expr/bool3.C: Likewise.
      	* g++.dg/ext/has_nothrow_constructor.C: Likewise.
      	* g++.dg/ext/has_nothrow_copy-7.C: Likewise.
      	* g++.dg/ext/has_nothrow_copy-1.C: Likewise.
      	* g++.dg/ext/has_nothrow_copy-2.C: Likewise.
      	* g++.dg/ext/has_nothrow_copy-4.C: Likewise.
      	* g++.dg/ext/has_nothrow_copy-5.C: Likewise.
      	* g++.dg/ext/has_nothrow_copy-6.C: Likewise.
      	* g++.dg/ext/has_nothrow_assign.C: Likewise.
      	* g++.dg/parse/register1.C: Likewise.
      	* g++.dg/parse/error15.C: Likewise.
      	* g++.dg/parse/linkage2.C: Likewise.
      	* g++.dg/concepts/intro2.C: Likewise.
      	* g++.dg/concepts/class.C: Likewise.
      	* g++.dg/concepts/traits1.C: Likewise.
      	* g++.dg/concepts/req5.C: Likewise.
      	* g++.dg/concepts/var-concept5.C: Likewise.
      	* g++.dg/concepts/fn-concept2.C: Likewise.
      	* g++.dg/concepts/traits2.C: Likewise.
      	* g++.dg/concepts/placeholder2.C: Likewise.
      	* g++.dg/concepts/class6.C: Likewise.
      	* g++.dg/concepts/memtmpl1.C: Likewise.
      	* g++.dg/concepts/friend2.C: Likewise.
      	* g++.dg/concepts/template-parm3.C: Likewise.
      	* g++.dg/concepts/template-parm10.C: Likewise.
      	* g++.dg/concepts/explicit-spec1.C: Likewise.
      	* g++.dg/concepts/explicit-spec3.C: Likewise.
      	* g++.dg/concepts/var-templ2.C: Likewise.
      	* g++.dg/concepts/intro5.C: Likewise.
      	* g++.dg/concepts/deduction-constraint1.C: Likewise.
      	* g++.dg/concepts/iconv1.C: Likewise.
      	* g++.dg/concepts/constrained-parm.C: Likewise.
      	* g++.dg/concepts/template-template-parm1.C: Likewise.
      	* g++.dg/concepts/var-concept3.C: Likewise.
      	* g++.dg/concepts/class3.C: Likewise.
      	* g++.dg/concepts/memfun2.C: Likewise.
      	* g++.dg/concepts/req1.C: Likewise.
      	* g++.dg/concepts/disjunction1.C: Likewise.
      	* g++.dg/concepts/req17.C: Likewise.
      	* g++.dg/concepts/pr65848.C: Likewise.
      	* g++.dg/concepts/placeholder4.C: Likewise.
      	* g++.dg/concepts/decl-diagnose.C: Likewise.
      	* g++.dg/concepts/intro7.C: Likewise.
      	* g++.dg/concepts/pr68683.C: Likewise.
      	* g++.dg/concepts/partial-spec4.C: Likewise.
      	* g++.dg/concepts/template-parm5.C: Likewise.
      	* g++.dg/concepts/explicit-inst1.C: Likewise.
      	* g++.dg/concepts/class-deduction1.C: Likewise.
      	* g++.dg/concepts/class1.C: Likewise.
      	* g++.dg/concepts/req15.C: Likewise.
      	* g++.dg/concepts/memfun.C: Likewise.
      	* g++.dg/concepts/pr68434.C: Likewise.
      	* g++.dg/concepts/inherit-ctor4.C: Likewise.
      	* g++.dg/concepts/partial-spec6.C: Likewise.
      	* g++.dg/concepts/var-templ1.C: Likewise.
      	* g++.dg/concepts/template-parm8.C: Likewise.
      	* g++.dg/concepts/explicit-inst3.C: Likewise.
      	* g++.dg/concepts/class4.C: Likewise.
      	* g++.dg/concepts/req6.C: Likewise.
      	* g++.dg/concepts/fn8.C: Likewise.
      	* g++.dg/concepts/class5.C: Likewise.
      	* g++.dg/concepts/placeholder5.C: Likewise.
      	* g++.dg/concepts/req16.C: Likewise.
      	* g++.dg/concepts/req10.C: Likewise.
      	* g++.dg/concepts/var-concept2.C: Likewise.
      	* g++.dg/concepts/auto3.C: Likewise.
      	* g++.dg/concepts/generic-fn-err.C: Likewise.
      	* g++.dg/concepts/pr65552.C: Likewise.
      	* g++.dg/concepts/partial-concept-id2.C: Likewise.
      	* g++.dg/concepts/fn1.C: Likewise.
      	* g++.dg/concepts/partial-spec.C: Likewise.
      	* g++.dg/concepts/template-parm12.C: Likewise.
      	* g++.dg/concepts/diagnostic1.C: Likewise.
      	* g++.dg/concepts/intro1.C: Likewise.
      	* g++.dg/concepts/explicit-inst4.C: Likewise.
      	* g++.dg/concepts/req18.C: Likewise.
      	* g++.dg/concepts/explicit-spec5.C: Likewise.
      	* g++.dg/concepts/var-concept6.C: Likewise.
      	* g++.dg/concepts/fn9.C: Likewise.
      	* g++.dg/concepts/req2.C: Likewise.
      	* g++.dg/concepts/template-parm7.C: Likewise.
      	* g++.dg/concepts/req14.C: Likewise.
      	* g++.dg/concepts/template-parm6.C: Likewise.
      	* g++.dg/concepts/variadic4.C: Likewise.
      	* g++.dg/concepts/fn6.C: Likewise.
      	* g++.dg/concepts/req-neg1.C: Likewise.
      	* g++.dg/concepts/alias3.C: Likewise.
      	* g++.dg/concepts/expression2.C: Likewise.
      	* g++.dg/concepts/partial-spec3.C: Likewise.
      	* g++.dg/concepts/expression3.C: Likewise.
      	* g++.dg/concepts/memfun-err.C: Likewise.
      	* g++.dg/concepts/pr66091.C: Likewise.
      	* g++.dg/concepts/explicit-spec2.C: Likewise.
      	* g++.dg/concepts/equiv.C: Likewise.
      	* g++.dg/concepts/friend1.C: Likewise.
      	* g++.dg/concepts/fn4.C: Likewise.
      	* g++.dg/concepts/var-templ3.C: Likewise.
      	* g++.dg/concepts/explicit-inst2.C: Likewise.
      	* g++.dg/concepts/alias2.C: Likewise.
      	* g++.dg/concepts/regress/alias-decl-42.C: Likewise.
      	* g++.dg/concepts/placeholder6.C: Likewise.
      	* g++.dg/concepts/fn10.C: Likewise.
      	* g++.dg/concepts/req3.C: Likewise.
      	* g++.dg/concepts/variadic2.C: Likewise.
      	* g++.dg/concepts/pr65636.C: Likewise.
      	* g++.dg/concepts/intro6.C: Likewise.
      	* g++.dg/concepts/class2.C: Likewise.
      	* g++.dg/concepts/fn2.C: Likewise.
      	* g++.dg/concepts/req20.C: Likewise.
      	* g++.dg/concepts/req8.C: Likewise.
      	* g++.dg/concepts/placeholder1.C: Likewise.
      	* g++.dg/concepts/pr65854.C: Likewise.
      	* g++.dg/concepts/member-concept.C: Likewise.
      	* g++.dg/concepts/template-parm2.C: Likewise.
      	* g++.dg/concepts/variadic1.C: Likewise.
      	* g++.dg/concepts/fn7.C: Likewise.
      	* g++.dg/concepts/intro4.C: Likewise.
      	* g++.dg/concepts/req13.C: Likewise.
      	* g++.dg/concepts/inherit-ctor3.C: Likewise.
      	* g++.dg/concepts/explicit-spec6.C: Likewise.
      	* g++.dg/concepts/auto1.C: Likewise.
      	* g++.dg/concepts/alias1.C: Likewise.
      	* g++.dg/concepts/fn-concept1.C: Likewise.
      	* g++.dg/concepts/template-parm11.C: Likewise.
      	* g++.dg/concepts/explicit-spec4.C: Likewise.
      	* g++.dg/concepts/partial-concept-id1.C: Likewise.
      	* g++.dg/concepts/req9.C: Likewise.
      	* g++.dg/concepts/req4.C: Likewise.
      	* g++.dg/concepts/pr65681.C: Likewise.
      	* g++.dg/concepts/req7.C: Likewise.
      	* g++.dg/concepts/req12.C: Likewise.
      	* g++.dg/concepts/fn5.C: Likewise.
      	* g++.dg/concepts/alias4.C: Likewise.
      	* g++.dg/concepts/generic-fn.C: Likewise.
      	* g++.dg/concepts/feature-macro.C: Likewise.
      	* g++.dg/concepts/req19.C: Likewise.
      	* g++.dg/concepts/placeholder3.C: Likewise.
      	* g++.dg/concepts/intro3.C: Likewise.
      	* g++.dg/concepts/partial-spec5.C: Likewise.
      	* g++.dg/concepts/template-parm4.C: Likewise.
      	* g++.dg/concepts/dr1430.C: Likewise.
      	* g++.dg/concepts/pr65634.C: Likewise.
      	* g++.dg/concepts/var-concept4.C: Likewise.
      	* g++.dg/concepts/pr67249.C: Likewise.
      	* g++.dg/concepts/expression.C: Likewise.
      	* g++.dg/concepts/pr65575.C: Likewise.
      	* g++.dg/concepts/partial-spec2.C: Likewise.
      	* g++.dg/concepts/template-parm9.C: Likewise.
      	* g++.dg/concepts/inherit-ctor1.C: Likewise.
      	* g++.dg/concepts/equiv2.C: Likewise.
      	* g++.dg/concepts/req11.C: Likewise.
      	* g++.dg/concepts/template-parm1.C: Likewise.
      	* g++.dg/concepts/inherit-ctor2.C: Likewise.
      	* g++.dg/concepts/var-concept1.C: Likewise.
      	* g++.dg/concepts/fn3.C: Likewise.
      	* g++.dg/torture/pr46364.C: Likewise.
      	* g++.dg/torture/stackalign/eh-alloca-1.C: Likewise.
      	* g++.dg/torture/stackalign/eh-fastcall-1.C: Likewise.
      	* g++.dg/torture/stackalign/eh-vararg-1.C: Likewise.
      	* g++.dg/torture/stackalign/eh-vararg-2.C: Likewise.
      	* g++.dg/torture/stackalign/eh-global-1.C: Likewise.
      	* g++.dg/torture/stackalign/eh-thiscall-1.C: Likewise.
      	* g++.dg/torture/stackalign/eh-inline-2.C: Likewise.
      	* g++.dg/torture/stackalign/eh-inline-1.C: Likewise.
      	* g++.dg/torture/pr52918-1.C: Likewise.
      	* g++.dg/torture/pr49394.C: Likewise.
      	* g++.dg/torture/pr57190.C: Likewise.
      	* g++.dg/cpp0x/static_assert8.C: Likewise.
      	* g++.dg/cpp0x/noexcept19.C: Likewise.
      	* g++.dg/cpp0x/variadic-throw.C: Likewise.
      	* g++.dg/cpp0x/variadic73.C: Likewise.
      	* g++.dg/cpp0x/noexcept02.C: Likewise.
      	* g++.dg/cpp0x/defaulted23.C: Likewise.
      	* g++.dg/cpp0x/noexcept08.C: Likewise.
      	* g++.dg/cpp0x/auto9.C: Likewise.
      	* g++.dg/cpp0x/lambda/lambda-eh2.C: Likewise.
      	* g++.dg/cpp0x/error5.C: Likewise.
      	* c-c++-common/gomp/atomic-12.c: Likewise.
      	* c-c++-common/gomp/atomic-13.c: Likewise.
      	* c-c++-common/gomp/atomic-14.c: Likewise.
      	* c-c++-common/Wvarargs-2.c: Likewise.
      	* c-c++-common/Wvarargs.c: Likewise.
      	* c-c++-common/vector-subscript-2.c: Likewise.
      	* g++.old-deja/g++.robertl/eb123.C: Likewise.
      	* g++.old-deja/g++.eh/tmpl3.C: Likewise.
      	* g++.old-deja/g++.eh/cleanup2.C: Likewise.
      	* g++.old-deja/g++.eh/badalloc1.C: Likewise.
      	* g++.old-deja/g++.eh/throw2.C: Likewise.
      	* g++.old-deja/g++.eh/throw1.C: Likewise.
      	* g++.old-deja/g++.eh/tmpl1.C: Likewise.
      	* g++.old-deja/g++.other/new7.C: Likewise.
      	* g++.old-deja/g++.other/crash30.C: Likewise.
      	* g++.old-deja/g++.other/regstack.C: Likewise.
      	* g++.old-deja/g++.other/crash28.C: Likewise.
      	* g++.old-deja/g++.jason/bool5.C: Likewise.
      	* g++.old-deja/g++.mike/p10416.C: Likewise.
      	* g++.old-deja/g++.mike/eh25.C: Likewise.
      	* g++.old-deja/g++.mike/eh55.C: Likewise.
      libcpp/
      	* include/cpplib.h (enum c_lang): Rename CLK_GNUCXX1Z
      	to CLK_GNUCXX17 and CLK_CXX1Z to CLK_CXX17.
      	* init.c (lang_defaults, cpp_init_builtins): Likewise.
      	* expr.c (cpp_classify_number): Use C++17 instead of C++1z
      	in diagnostics.
      libstdc++-v3/
      	* testsuite/libstdc++-prettyprinters/cxx17.cc: Use -std=c++17 or
      	-std=gnu++17 instead of -std=c++1z or -std=gnu++1z.  Use c++17 instead
      	of c++1z and c++17_only instead of c++1z_only.  Adjust expected
      	diagnostics and comments refering to 1z to 17.
      	* testsuite/30_threads/lock_guard/cons/deduction.cc: Likewise.
      	* testsuite/30_threads/scoped_lock/cons/deduction.cc: Likewise.
      	* testsuite/30_threads/scoped_lock/cons/1.cc: Likewise.
      	* testsuite/30_threads/scoped_lock/requirements/typedefs.cc: Likewise.
      	* testsuite/30_threads/scoped_lock/requirements/explicit_instantiation.cc:
      	Likewise.
      	* testsuite/30_threads/unique_lock/cons/deduction.cc: Likewise.
      	* testsuite/18_support/launder/1.cc (test02): Likewise.
      	* testsuite/18_support/launder/requirements_neg.cc: Likewise.
      	* testsuite/18_support/launder/requirements.cc: Likewise.
      	* testsuite/18_support/byte/requirements.cc: Likewise.
      	* testsuite/18_support/byte/ops.cc: Likewise.
      	* testsuite/18_support/byte/global_neg.cc: Likewise.
      	* testsuite/18_support/uncaught_exceptions/uncaught_exceptions.cc:
      	Likewise.
      	* testsuite/27_io/types/4.cc: Likewise.
      	* testsuite/25_algorithms/sample/81221.cc: Likewise.
      	* testsuite/25_algorithms/sample/1.cc: Likewise.
      	* testsuite/25_algorithms/sample/2.cc: Likewise.
      	* testsuite/25_algorithms/search/searcher.cc: Likewise.
      	* testsuite/28_regex/basic_regex/ctors/deduction.cc: Likewise.
      	* testsuite/experimental/filesystem/path/construct/string_view.cc:
      	Likewise.
      	* testsuite/24_iterators/range_access_cpp17.cc: Likewise.
      	* testsuite/24_iterators/container_access.cc: Likewise.
      	* testsuite/ext/pb_ds/regression/hash_map_rand.cc: Likewise.
      	* testsuite/ext/pb_ds/regression/trie_set_rand.cc: Likewise.
      	* testsuite/ext/pb_ds/regression/hash_set_rand.cc: Likewise.
      	* testsuite/ext/pb_ds/regression/list_update_set_rand.cc: Likewise.
      	* testsuite/ext/pb_ds/regression/list_update_map_rand.cc: Likewise.
      	* testsuite/ext/pb_ds/regression/priority_queue_rand.cc: Likewise.
      	* testsuite/ext/pb_ds/regression/tree_set_rand.cc: Likewise.
      	* testsuite/ext/pb_ds/regression/tree_map_rand.cc: Likewise.
      	* testsuite/ext/pb_ds/regression/trie_map_rand.cc: Likewise.
      	* testsuite/20_util/shared_ptr/casts/reinterpret.cc: Likewise.
      	* testsuite/20_util/shared_ptr/cons/deduction.cc: Likewise.
      	* testsuite/20_util/shared_ptr/cons/array.cc: Likewise.
      	* testsuite/20_util/shared_ptr/observers/array.cc (struct A): Likewise.
      	* testsuite/20_util/pair/cons/deduction.cc: Likewise.
      	* testsuite/20_util/variant/deduction.cc: Likewise.
      	* testsuite/20_util/tuple/78939.cc: Likewise.
      	* testsuite/20_util/tuple/cons/deduction.cc: Likewise.
      	* testsuite/20_util/void_t/1.cc: Likewise.
      	* testsuite/20_util/duration/arithmetic/constexpr_c++17.cc: Likewise.
      	* testsuite/20_util/unique_ptr/cons/deduction_neg.cc: Likewise.
      	* testsuite/20_util/addressof/requirements/constexpr.cc: Likewise.
      	* testsuite/20_util/weak_ptr/cons/deduction.cc: Likewise.
      	* testsuite/20_util/has_unique_object_representations/requirements/typedefs.cc:
      	Likewise.
      	* testsuite/20_util/has_unique_object_representations/requirements/explicit_instantiation.cc:
      	Likewise.
      	* testsuite/20_util/has_unique_object_representations/value.cc:
      	Likewise.
      	* testsuite/20_util/time_point/arithmetic/constexpr.cc: Likewise.
      	* testsuite/20_util/function_objects/invoke/59768.cc: Likewise.
      	* testsuite/20_util/function_objects/mem_fn/80478.cc: Likewise.
      	* testsuite/20_util/function/cons/deduction.cc: Likewise.
      	* testsuite/20_util/specialized_algorithms/memory_management_tools/destroy_neg.cc:
      	Likewise.
      	* testsuite/20_util/is_aggregate/requirements/typedefs.cc: Likewise.
      	* testsuite/20_util/is_aggregate/requirements/explicit_instantiation.cc:
      	Likewise.
      	* testsuite/20_util/is_aggregate/value.cc: Likewise.
      	* testsuite/26_numerics/lcm/1.cc: Likewise.
      	* testsuite/26_numerics/lcm/lcm_neg.cc: Likewise.
      	* testsuite/26_numerics/gcd/1.cc: Likewise.
      	* testsuite/26_numerics/gcd/gcd_neg.cc: Likewise.
      	* testsuite/26_numerics/valarray/deduction.cc: Likewise.
      	* testsuite/26_numerics/headers/cmath/types_std_c++0x_neg.cc: Likewise.
      	* testsuite/26_numerics/headers/cmath/hypot.cc: Likewise.
      	* testsuite/23_containers/queue/members/emplace_cxx17_return.cc:
      	Likewise.
      	* testsuite/23_containers/array/cons/deduction.cc: Likewise.
      	* testsuite/23_containers/array/cons/deduction_neg.cc: Likewise.
      	* testsuite/23_containers/deque/modifiers/emplace/cxx17_return.cc:
      	Likewise.
      	* testsuite/23_containers/deque/cons/deduction.cc: Likewise.
      	* testsuite/23_containers/stack/members/emplace_cxx17_return.cc:
      	Likewise.
      	* testsuite/23_containers/list/modifiers/emplace/cxx17_return.cc:
      	Likewise.
      	* testsuite/23_containers/list/cons/deduction.cc: Likewise.
      	* testsuite/23_containers/forward_list/modifiers/emplace_cxx17_return.cc:
      	Likewise.
      	* testsuite/23_containers/forward_list/cons/deduction.cc: Likewise.
      	* testsuite/23_containers/unordered_set/allocator/ext_ptr.cc: Likewise.
      	* testsuite/23_containers/vector/modifiers/emplace/cxx17_return.cc:
      	Likewise.
      	* testsuite/23_containers/vector/cons/deduction.cc: Likewise.
      	* testsuite/23_containers/vector/bool/emplace_cxx17_return.cc:
      	Likewise.
      	* testsuite/21_strings/basic_string/cons/char/9.cc: Likewise.
      	* testsuite/21_strings/basic_string/cons/char/deduction.cc: Likewise.
      	* testsuite/21_strings/basic_string/cons/char/79162.cc: Likewise.
      	* testsuite/21_strings/basic_string/cons/wchar_t/9.cc: Likewise.
      	* testsuite/21_strings/basic_string/cons/wchar_t/deduction.cc:
      	Likewise.
      	* testsuite/21_strings/basic_string/cons/wchar_t/79162.cc: Likewise.
      	* testsuite/21_strings/basic_string_view/modifiers/swap/char/1.cc:
      	Likewise.
      	* testsuite/21_strings/basic_string_view/modifiers/swap/wchar_t/1.cc:
      	Likewise.
      	* testsuite/21_strings/basic_string_view/operations/compare/char/2.cc:
      	Likewise.
      	* testsuite/21_strings/basic_string_view/operations/compare/char/70483.cc:
      	Likewise.
      	* testsuite/21_strings/basic_string_view/operations/compare/wchar_t/2.cc:
      	Likewise.
      	* testsuite/21_strings/char_traits/requirements/constexpr_functions_c++17.cc:
      	Likewise.
      
      From-SVN: r252826
      7b936140
  35. Jan 01, 2017
  36. Nov 23, 2016
    • Paolo Bonzini's avatar
      system.h (HAVE_DESIGNATED_INITIALIZERS, [...]): Do not use "defined" in macros. · fb2675cb
      Paolo Bonzini authored
      gcc:
      2016-11-23  Paolo Bonzini  <bonzini@gnu.org>
      
      	* system.h (HAVE_DESIGNATED_INITIALIZERS,
      	HAVE_DESIGNATED_UNION_INITIALIZERS): Do not use
      	"defined" in macros.
      	* doc/cpp.texi (Defined): Mention -Wexpansion-to-defined.
      	* doc/cppopts.texi (Invocation): Document -Wexpansion-to-defined.
      	* doc/invoke.texi (Warning Options): Document -Wexpansion-to-defined.
      
      gcc/c-family:
      2016-11-23  Paolo Bonzini  <bonzini@gnu.org>
      
      	* c.opt (Wexpansion-to-defined): New.
      
      gcc/testsuite:
      2016-11-23  Paolo Bonzini  <bonzini@gnu.org>
      
      	* gcc.dg/cpp/defined.c: Mark newly introduced warnings and
      	adjust for warning->pedwarn change.
      	* gcc.dg/cpp/defined-syshdr.c,
      	gcc.dg/cpp/defined-Wexpansion-to-defined.c,
      	gcc.dg/cpp/defined-Wextra-Wno-expansion-to-defined.c,
      	gcc.dg/cpp/defined-Wextra.c,
      	gcc.dg/cpp/defined-Wno-expansion-to-defined.c: New testcases.
      
      libcpp:
      2016-11-23  Paolo Bonzini  <bonzini@gnu.org>
      
      	* include/cpplib.h (struct cpp_options): Add new member
      	warn_expansion_to_defined.
      	(CPP_W_EXPANSION_TO_DEFINED): New enum member.
      	* expr.c (parse_defined): Warn for all uses of "defined"
      	in macros, and tie warning to CPP_W_EXPANSION_TO_DEFINED.
      	Make it a pedwarning instead of a warning.
      	* system.h (HAVE_DESIGNATED_INITIALIZERS): Do not use
      	"defined" in macros.
      
      From-SVN: r242743
      fb2675cb
  37. Aug 19, 2016
    • Joseph Myers's avatar
      Implement C _FloatN, _FloatNx types. · c65699ef
      Joseph Myers authored
      ISO/IEC TS 18661-3:2015 defines C bindings to IEEE interchange and
      extended types, in the form of _FloatN and _FloatNx type names with
      corresponding fN/FN and fNx/FNx constant suffixes and FLTN_* / FLTNX_*
      <float.h> macros.  This patch implements support for this feature in
      GCC.
      
      The _FloatN types, for N = 16, 32, 64 or >= 128 and a multiple of 32,
      are types encoded according to the corresponding IEEE interchange
      format (endianness unspecified; may use either the NaN conventions
      recommended in IEEE 754-2008, or the MIPS NaN conventions, since the
      choice of convention is only an IEEE recommendation, not a
      requirement).  The _FloatNx types, for N = 32, 64 and 128, are IEEE
      "extended" types: types extending a narrower format with range and
      precision at least as big as those specified in IEEE 754 for each
      extended type (and with unspecified representation, but still
      following IEEE semantics for their values and operations - and with
      the set of values being determined by the precision and the maximum
      exponent, which means that while Intel "extended" is suitable for
      _Float64x, m68k "extended" is not).  These types are always distinct
      from and not compatible with each other and the standard floating
      types float, double, long double; thus, double, _Float64 and _Float32x
      may all have the same ABI, but they are three still distinct types.
      The type names may be used with _Complex to construct corresponding
      complex types (unlike __float128, which acts more like a typedef name
      than a keyword - thus, this patch may be considered to fix PR
      c/32187).  The new suffixes can be combined with GNU "i" and "j"
      suffixes for constants of complex types (e.g. 1.0if128, 2.0f64i).
      
      The set of types supported is implementation-defined.  In this GCC
      patch, _Float32 is SFmode if that is suitable; _Float32x and _Float64
      are DFmode if that is suitable; _Float128 is TFmode if that is
      suitable; _Float64x is XFmode if that is suitable, and otherwise
      TFmode if that is suitable.  There is a target hook to override the
      choices if necessary.  "Suitable" means both conforming to the
      requirements of that type, and supported as a scalar type including in
      libgcc.  The ABI is whatever the back end does for scalars of that
      mode (but note that _Float32 is passed without promotion in variable
      arguments, unlike float).  All the existing issues with exceptions and
      rounding modes for existing types apply equally to the new type names.
      
      No GCC port supports a floating-point format suitable for _Float128x.
      Although there is HFmode support for ARM and AArch64, use of that for
      _Float16 is not enabled.  Supporting _Float16 would require additional
      work on the excess precision aspects of TS 18661-3: there are new
      values of FLT_EVAL_METHOD, which are not currently supported in GCC,
      and FLT_EVAL_METHOD == 0 now means that operations and constants on
      types narrower than float are evaluated to the range and precision of
      float.  Implementing that, so that _Float16 gets evaluated with excess
      range and precision, would involve changes to the excess precision
      infrastructure so that the _Float16 case is enabled by default, unlike
      the x87 case which is only enabled for -fexcess-precision=standard.
      Other differences between _Float16 and __fp16 would also need to be
      disentangled.
      
      GCC has some prior support for nonstandard floating-point types in the
      form of __float80 and __float128.  Where these were previously types
      distinct from long double, they are made by this patch into aliases
      for _Float64x / _Float128 if those types have the required properties.
      
      In principle the set of possible _FloatN types is infinite.  This
      patch hardcodes the four such types for N <= 128, but with as much
      code as possible using loops over types to minimize the number of
      places with such hardcoding.  I don't think it's likely any further
      such types will be of use in future (or indeed that formats suitable
      for _Float128x will actually be implemented).  There is a corner case
      that all _FloatN, for N >= 128 and a multiple of 32, should be treated
      as keywords even when the corresponding type is not supported; I
      intend to deal with that in a followup patch.
      
      Tests are added for various functionality of the new types, mostly
      using type-generic headers.  The tests use dg-add-options to pass any
      extra options needed to enable the types; this is wired up to use the
      same options as for __float128 on powerpc to enable _Float128 and
      _Float64x, and effective-target keywords for runtime support do the
      same hardware test as for __float128 to make sure the VSX instructions
      generated by those options are supported.  (Corresponding additions
      would be needed for _Float16 on ARM as well if that were enabled with
      -mfp16-format=ieee required to use it rather than unconditionally
      available.  Of course, -mfp16-format=alternative enables use of a
      format which is not compatible with the requirements of the _Float16
      type.)
      
      C++ note: no support for the new types or constant suffixes is added
      for C++.  C++ decimal floating-point support was very different from
      the C support, using class types, and the same may well apply to any
      future C++ bindings for IEEE interchange and extended types.  There is
      a case, however, for supporting at least *f128 constants in C++, so
      that code using __float128 can use the newer style for constants
      throughout rather than needing to use the older *q constants in C++.
      Also, if built-in functions are added that may provide a way in which
      the types could leak into C++ code.
      
      Fortran note: the float128_type_node used in the Fortran front end is
      renamed to gfc_float128_type_node, since the semantics are different:
      in particular, if long double has binary128 format, then the new
      language-independent float128_type_node is a distinct type that also
      has binary128 format, but the Fortran node is expected to be NULL in
      that case.  Likewise, Fortran's complex_float128_type_node is renamed
      to gfc_complex_float128_type_node.
      
      PowerPC note: the back end had an inconsistency that if TFmode was
      binary128, *q constants were TFmode instead of KFmode but __float128
      was KFmode.  This patch follows the same logic as for *q constants, so
      that _Float128 prefers TFmode (and __float128 becomes an alias for
      _Float128).
      
      ARM note: __fp16 is promoted to double (by convert_arguments) when
      passed without a prototype / in variable arguments.  But this is only
      about the argument promotion; it is not handled as promoting in
      c-common.c:self_promoting_args_p / c-typeck.c:c_type_promotes_to,
      meaning that a K&R function definition for an argument of type __fp16
      corresponds to a prototype with an argument of that type, not to one
      with an argument of type double, whereas a float argument in a K&R
      function definition corresponds to a double prototype argument - and
      the same functions are also what's involved in making va_arg give a
      warning and generate a call to abort when called with type float.
      This is preserved by this patch, while arranging for _Float16 not to
      be promoted when passed without a prototype / in variable arguments
      (the promotion of float being considered a legacy feature, not applied
      to any new types in C99 or later).
      
      TS 18661-3 extends the set of decimal floating-point types similarly,
      and adds new constant suffixes for the existing types, but this patch
      does not do anything regarding that extension.
      
      This patch does nothing regarding built-in functions, although
      type-generic functions such as __builtin_isinf work for the new types
      and associated tests are included.  There are at least two levels of
      built-in function support possible for these types.  The minimal
      level, implemented in
      <https://gcc.gnu.org/ml/gcc-patches/2016-06/msg01702.html> (which
      needs updating to use dg-add-options), adds built-in functions similar
      to those x86 has for __float128: __builtin_inf* __builtin_huge_val*,
      __builtin_nan*, __builtin_nans*, __builtin_fabs*, __builtin_copysign*.
      That would be sufficient for glibc to use the *f128 names for built-in
      functions by default with *q used only for backwards compatibility
      when using older GCC versions.  That would also allow c_cpp_builtins's
      flag_building_libgcc code, defining __LIBGCC_%s_FUNC_EXT__, to use
      such suffixes rather than the present code hardcoding logic about
      target-specific constant suffixes and how those relate to function
      suffixes.
      
      Full built-in function support would cover the full range of built-in
      functions for existing floating-point types, adding variants for all
      the new types, except for a few obsolescent functions and
      non-type-generic variants of type-generic functions.  Some but not all
      references to such functions in GCC use macros such as CASE_FLT_FN to
      be type-generic; a fair amount of work would be needed to identify all
      places to update.  Adding all those functions would enable
      optimizations (for constant arguments and otherwise) for TS 18661-3
      functions, but it would also substantially expand the enum listing
      built-in functions (and we've had problems with the size of that enum
      in the past), and increase the amount of built-in function
      initialization to do - I don't know what the startup cost involved in
      built-in function initialization is, but it would be something to
      consider when adding such a large set of functions.
      
      There are also a range of optimizations, in match.pd and elsewhere,
      that only operate on the three standard floating-point types.  Ideally
      those would be made generic to all floating-point types, but this
      patch does nothing in that regard.  Special care would be needed
      regarding making sure library functions to which calls are generated
      actually exist.  For example, if sqrt is called on an argument of type
      _Float32, and the result converted to _Float32, this is equivalent to
      doing a square root operation directly on _Float32.  But if the user's
      libm does not have the sqrtf32 function, or the name is not reserved
      because __STDC_WANT_IEC_60559_TYPES_EXT__ was not defined before
      including <math.h>, you can only do that optimization if you convert
      to a call to sqrtf instead.
      
      DECIMAL_DIG now relates to all supported floating-point formats, not
      just float, double and long double; I've raised the question with WG14
      of how this relates to the formula for DECIMAL_DIG in C11 not
      considering this.  TS 18661-3 says it also covers non-arithmetic
      formats only supported by library conversion functions; this patch
      does not add any target hooks to allow for the case where there are
      such formats wider than any supported for arithmetic types (where
      e.g. libc supports conversions involving the binary128 representation,
      but the _Float128 type is not supported).
      
      GCC provides its own <tgmath.h> for some targets.  No attempt is made
      to adapt this to handle the new types.
      
      Nothing is done regarding debug info for the new types (see the
      "Debugger support for __float128 type?" thread on gcc@, Sep/Oct 2015).
      
      No __SIZEOF_*__ macros are added for the new types.
      
      Nothing is done with do_warn_double_promotion.
      
      Nothing is done to include the new types in those determining
      max_align_t, although properly it should be sufficiently aligned for
      any of those types.
      
      The logic for usual arithmetic conversions in c_common_type relies on
      TYPE_PRECISION for floating-point types, which is less than ideal
      (doesn't necessarily correspond to whether one type's values are
      subset of another); looking in more detail at the formats might be
      better.  But since I included code in build_common_tree_nodes to work
      around rs6000 KFmode having precision 113 not 128, I think it should
      work.  Ideally one might have errors in generic code for the case
      where the two types do not have one type's values a subset of the
      other (which is undefined behavior).  But the only case where this can
      actually occur is mixing IBM long double with binary128 on powerpc,
      and rs6000_invalid_binary_op deals with that at present.  TS 18661-3
      does not fully specify the type resulting from the usual arithmetic
      conversions in the case where two _FloatNx types have the same set of
      values; I arranged the code to prefer the greater value of N in that
      case.
      
      The __FP_FAST_FMA* macros are not extended to cover the new types,
      since there are no corresponding built-in functions (if built-in
      fmafN, fmafNx are added, the macros should be extended, and the new
      macros documented).  Also, only a limited set of modes is handled in
      mode_has_fma.
      
      Diagnostics relating to the use of the new types with -pedantic do not
      try to distinguish them from purely nonstandard types such as __int128
      and constant suffixes such as *q.
      
      If you use an unsupported _FloatN / _FloatNx type you get a warning
      about the type defaulting to int after the warning about the type not
      being supported.  That's less than ideal, but it's also a pre-existing
      condition if you use __int128 on a 32-bit system where it's
      unsupported.
      
      Bootstrapped with no regressions on x86_64-pc-linux-gnu.  Other
      back-end changes minimally tested by building cc1 for ia64-linux-gnu,
      powerpc64le-linux-gnu, pdp11-none (the last failed for unrelated
      reasons).
      
      	PR c/32187
      gcc:
      	* tree-core.h (TI_COMPLEX_FLOAT16_TYPE)
      	(TI_COMPLEX_FLOATN_NX_TYPE_FIRST, TI_COMPLEX_FLOAT32_TYPE)
      	(TI_COMPLEX_FLOAT64_TYPE, TI_COMPLEX_FLOAT128_TYPE)
      	(TI_COMPLEX_FLOAT32X_TYPE, TI_COMPLEX_FLOAT64X_TYPE)
      	(TI_COMPLEX_FLOAT128X_TYPE, TI_FLOAT16_TYPE, TI_FLOATN_TYPE_FIRST)
      	(TI_FLOATN_NX_TYPE_FIRST, TI_FLOAT32_TYPE, TI_FLOAT64_TYPE)
      	(TI_FLOAT128_TYPE, TI_FLOATN_TYPE_LAST, TI_FLOAT32X_TYPE)
      	(TI_FLOATNX_TYPE_FIRST, TI_FLOAT64X_TYPE, TI_FLOAT128X_TYPE)
      	(TI_FLOATNX_TYPE_LAST, TI_FLOATN_NX_TYPE_LAST): New enum
      	tree_index values.
      	(NUM_FLOATN_TYPES, NUM_FLOATNX_TYPES, NUM_FLOATN_NX_TYPES): New
      	macros.
      	(struct floatn_type_info): New structure type.
      	(floatn_nx_types): New variable declaration.
      	* tree.h (FLOATN_TYPE_NODE, FLOATN_NX_TYPE_NODE)
      	(FLOATNX_TYPE_NODE, float128_type_node, float64x_type_node)
      	(COMPLEX_FLOATN_NX_TYPE_NODE): New macros.
      	* tree.c (floatn_nx_types): New variable.
      	(build_common_tree_nodes): Initialize _FloatN, _FloatNx and
      	corresponding complex types.
      	* target.def (floatn_mode): New hook.
      	* targhooks.c: Include "real.h".
      	(default_floatn_mode): New function.
      	* targhooks.h (default_floatn_mode): New prototype.
      	* doc/extend.texi (Floating Types): Document _FloatN and _FloatNx
      	types.
      	* doc/sourcebuild.texi (float@var{n}, float@var{n}x): Document new
      	effective-target and dg-add-options keywords.
      	(float@var{n}_runtime, float@var{n}x_runtime, floatn_nx_runtime):
      	Document new effective-target keywords.
      	* doc/tm.texi.in (TARGET_FLOATN_MODE): New @hook.
      	* doc/tm.texi: Regenerate.
      	* ginclude/float.h (LDBL_DECIMAL_DIG): Define to
      	__LDBL_DECIMAL_DIG__, not __DECIMAL_DIG__.
      	[__STDC_WANT_IEC_60559_TYPES_EXT__]: Define macros from TS
      	18661-3.
      	* real.h (struct real_format): Add field ieee_bits.
      	* real.c (ieee_single_format, mips_single_format)
      	(motorola_single_format, spu_single_format, ieee_double_format)
      	(mips_double_format, motorola_double_format)
      	(ieee_extended_motorola_format, ieee_extended_intel_96_format)
      	(ieee_extended_intel_128_format)
      	(ieee_extended_intel_96_round_53_format, ibm_extended_format)
      	(mips_extended_format, ieee_quad_format, mips_quad_format)
      	(vax_f_format, vax_d_format, vax_g_format, decimal_single_format)
      	(decimal_double_format, decimal_quad_format, ieee_half_format)
      	(arm_half_format, real_internal_format: Initialize ieee_bits
      	field.
      	* config/i386/i386.c (ix86_init_builtin_types): Do not initialize
      	float128_type_node.  Set float80_type_node to float64x_type_node
      	if appropriate and long_double_type_node not appropriate.
      	* config/ia64/ia64.c (ia64_init_builtins): Likewise.
      	* config/pdp11/pdp11.c (pdp11_f_format, pdp11_d_format):
      	Initialize ieee_bits field.
      	* config/rs6000/rs6000.c (TARGET_FLOATN_MODE): New macro.
      	(rs6000_init_builtins): Set ieee128_float_type_node to
      	float128_type_node.
      	(rs6000_floatn_mode): New function.
      
      gcc/c:
      	* c-tree.h (cts_floatn_nx): New enum c_typespec_keyword value.
      	(struct c_declspecs): Add field floatn_nx_idx.
      	* c-decl.c (declspecs_add_type, finish_declspecs): Handle _FloatN
      	and _FloatNx type specifiers.
      	* c-parser.c (c_keyword_starts_typename, c_token_starts_declspecs)
      	(c_parser_declspecs, c_parser_attribute_any_word)
      	(c_parser_objc_selector): Use CASE_RID_FLOATN_NX.
      	* c-typeck.c (c_common_type): Handle _FloatN and _FloatNx types.
      	(convert_arguments): Avoid promoting _FloatN and _FloatNx types
      	narrower than double.
      
      gcc/c-family:
      	* c-common.h (RID_FLOAT16, RID_FLOATN_NX_FIRST, RID_FLOAT32)
      	(RID_FLOAT64, RID_FLOAT128, RID_FLOAT32X, RID_FLOAT64X)
      	(RID_FLOAT128X): New enum rid values.
      	(CASE_RID_FLOATN_NX): New macro.
      	* c-common.c (c_common_reswords): Add _FloatN and _FloatNx
      	keywords.
      	(c_common_type_for_mode): Check for _FloatN and _FloatNx and
      	corresponding complex types.
      	(c_common_nodes_and_builtins): For non-C++, register _FloatN and
      	_FloatNx and corresponding complex types.
      	(keyword_begins_type_specifier): Use CASE_RID_FLOATN_NX.
      	* c-cppbuiltin.c (builtin_define_float_constants): Check _FloatN
      	and _FloatNx types for the widest type for determining
      	DECIMAL_DIG.  Define __LDBL_DECIMAL_DIG__ as well as
      	__DECIMAL_DIG__ for long double.  Handle FMA_SUFFIX being NULL.
      	(c_cpp_builtins): Call builtin_define_float_constants for _FloatN
      	and _FloatNx types.
      	* c-lex.c (interpret_float): Handle _FloatN and _FloatNx
      	constants.
      	* c-pretty-print.c (pp_c_floating_constant): Handle _FloatN and
      	_FloatNx types.
      
      gcc/fortran:
      	* trans-types.h (float128_type_node): Rename to
      	gfc_float128_type_node.
      	(complex_float128_type_node): Rename to
      	gfc_complex_float128_type_node.
      	* iso-c-binding.def, trans-intrinsic.c, trans-types.c: All users
      	changed.
      
      gcc/testsuite:
      	* lib/target-supports.exp (check_effective_target_float16)
      	(check_effective_target_float32, check_effective_target_float64)
      	(check_effective_target_float128, check_effective_target_float32x)
      	(check_effective_target_float64x)
      	(check_effective_target_float128x)
      	(check_effective_target_float16_runtime)
      	(check_effective_target_float32_runtime)
      	(check_effective_target_float64_runtime)
      	(check_effective_target_float128_runtime)
      	(check_effective_target_float32x_runtime)
      	(check_effective_target_float64x_runtime)
      	(check_effective_target_float128x_runtime)
      	(check_effective_target_floatn_nx_runtime)
      	(add_options_for_float16, add_options_for_float32)
      	(add_options_for_float64, add_options_for_float128)
      	(add_options_for_float32x, add_options_for_float64x)
      	(add_options_for_float128x): New procedures.
      	* gcc.dg/dfp/floatn.c, gcc.dg/float128-typeof.c,
      	gcc.dg/float128x-typeof.c, gcc.dg/float16-typeof.c,
      	gcc.dg/float32-typeof.c, gcc.dg/float32x-typeof.c,
      	gcc.dg/float64-typeof.c, gcc.dg/float64x-typeof.c,
      	gcc.dg/floatn-arithconv.c, gcc.dg/floatn-errs.c,
      	gcc.dg/floatn-typeof.h, gcc.dg/torture/float128-basic.c,
      	gcc.dg/torture/float128-complex.c,
      	gcc.dg/torture/float128-floath.c, gcc.dg/torture/float128-tg.c,
      	gcc.dg/torture/float128x-basic.c,
      	gcc.dg/torture/float128x-complex.c,
      	gcc.dg/torture/float128x-floath.c, gcc.dg/torture/float128x-tg.c,
      	gcc.dg/torture/float16-basic.c, gcc.dg/torture/float16-complex.c,
      	gcc.dg/torture/float16-floath.c, gcc.dg/torture/float16-tg.c,
      	gcc.dg/torture/float32-basic.c, gcc.dg/torture/float32-complex.c,
      	gcc.dg/torture/float32-floath.c, gcc.dg/torture/float32-tg.c,
      	gcc.dg/torture/float32x-basic.c,
      	gcc.dg/torture/float32x-complex.c,
      	gcc.dg/torture/float32x-floath.c, gcc.dg/torture/float32x-tg.c,
      	gcc.dg/torture/float64-basic.c, gcc.dg/torture/float64-complex.c,
      	gcc.dg/torture/float64-floath.c, gcc.dg/torture/float64-tg.c,
      	gcc.dg/torture/float64x-basic.c,
      	gcc.dg/torture/float64x-complex.c,
      	gcc.dg/torture/float64x-floath.c, gcc.dg/torture/float64x-tg.c,
      	gcc.dg/torture/floatn-basic.h, gcc.dg/torture/floatn-complex.h,
      	gcc.dg/torture/floatn-convert.c, gcc.dg/torture/floatn-floath.h,
      	gcc.dg/torture/floatn-tg.h,
      	gcc.dg/torture/fp-int-convert-float128-ieee-timode.c,
      	gcc.dg/torture/fp-int-convert-float128-ieee.c,
      	gcc.dg/torture/fp-int-convert-float128x-timode.c,
      	gcc.dg/torture/fp-int-convert-float128x.c,
      	gcc.dg/torture/fp-int-convert-float16-timode.c,
      	gcc.dg/torture/fp-int-convert-float16.c,
      	gcc.dg/torture/fp-int-convert-float32-timode.c,
      	gcc.dg/torture/fp-int-convert-float32.c,
      	gcc.dg/torture/fp-int-convert-float32x-timode.c,
      	gcc.dg/torture/fp-int-convert-float32x.c,
      	gcc.dg/torture/fp-int-convert-float64-timode.c,
      	gcc.dg/torture/fp-int-convert-float64.c,
      	gcc.dg/torture/fp-int-convert-float64x-timode.c,
      	gcc.dg/torture/fp-int-convert-float64x.c: New tests.
      	* gcc.dg/torture/fp-int-convert.h (TEST_I_F): Add argument for
      	maximum exponent of floating-point type.  Use it in testing
      	whether 0x8...0 fits in the floating-point type.  Always treat -1
      	(signed 0xf...f) as fitting in the floating-point type.
      	(M_OK1): New macro.
      	* gcc.dg/torture/fp-int-convert-double.c,
      	gcc.dg/torture/fp-int-convert-float.c,
      	gcc.dg/torture/fp-int-convert-float128-timode.c,
      	gcc.dg/torture/fp-int-convert-float128.c,
      	gcc.dg/torture/fp-int-convert-float80-timode.c,
      	gcc.dg/torture/fp-int-convert-float80.c,
      	gcc.dg/torture/fp-int-convert-long-double.c,
      	gcc.dg/torture/fp-int-convert-timode.c: Update calls to TEST_I_F.
      
      libcpp:
      	* include/cpplib.h (CPP_N_FLOATN, CPP_N_FLOATNX)
      	(CPP_N_WIDTH_FLOATN_NX, CPP_FLOATN_SHIFT, CPP_FLOATN_MAX): New
      	macros.
      	* expr.c (interpret_float_suffix): Handle fN, fNx, FN and FNx
      	suffixes.
      
      From-SVN: r239625
      c65699ef
    • Prathamesh Kulkarni's avatar
      expr.c (eval_token): Append "evaluates to 0" to Wundef diagnostic. · fcf830ab
      Prathamesh Kulkarni authored
      2016-08-19  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>
      
      libcpp/
      	* expr.c (eval_token): Append "evaluates to 0" to Wundef diagnostic.
      
      testsuite/
      	* gcc.dg/cpp/warn-undef.c: Append "evaluates to 0" to dg-error.
      	* gcc.dg/cpp/warn-undef-2.c: Likewise.
      
      From-SVN: r239609
      fcf830ab
Loading