Skip to content
Snippets Groups Projects
  1. Nov 16, 2022
    • Jakub Jelinek's avatar
      c++: Fix up calls to static operator() or operator[] [PR107624] · cf958f8f
      Jakub Jelinek authored
      One thing that doesn't work properly is the same problem as I've filed
      yesterday for static operator() - PR107624 - that side-effects of
      the postfix-expression on which the call or subscript operator are
      applied are thrown away, I assume we have to add them into COMPOUND_EXPR
      somewhere after we find out that the we've chosen a static member function
      operator.
      
      On Mon, Nov 14, 2022 at 06:29:44PM -0500, Jason Merrill wrote:
      > Indeed.  The code in build_new_method_call for this case has the comment
      >
      >               /* In an expression of the form `a->f()' where `f' turns
      >                  out to be a static member function, `a' is
      >                  none-the-less evaluated.  */
      
      Had to tweak 3 spots for this.  Furthermore, found that if in non-pedantic
      C++20 compilation static operator[] is accepted, we required that it has 2
      arguments, I think it is better to require exactly one because that case
      is the only one that will actually work in C++20 and older.
      
      2022-11-16  Jakub Jelinek  <jakub@redhat.com>
      
      	PR c++/107624
      	* call.cc (keep_unused_object_arg): New function.
      	(build_op_call): Use it.
      	(build_op_subscript): Likewise.
      	(build_new_op): Similarly for ARRAY_REF.
      	(build_new_method_call): Use it.
      	* decl.cc (grok_op_properties): For C++20 and earlier, if operator[]
      	is static member function, require exactly one parameter rather than
      	exactly two parameters.
      
      	* g++.dg/cpp23/static-operator-call4.C: New test.
      	* g++.dg/cpp23/subscript10.C: New test.
      	* g++.dg/cpp23/subscript11.C: New test.
      cf958f8f
    • Alexander Monakov's avatar
      doc: fix description of -mrelax-cmpxchg-loop [PR 107676] · 85966f0d
      Alexander Monakov authored
      gcc/ChangeLog:
      
      	PR target/107676
      	* doc/invoke.texi (-mrelax-cmpxchg-loop): Reword description.
      85966f0d
    • Alexander Monakov's avatar
      i386: correct x87&SSE multiplication modeling in znver.md · d4cc7a8c
      Alexander Monakov authored
      All multiplication instructions are fully pipelined, except AVX256
      instructions on Zen 1, which issue over two cycles on a 128-bit unit.
      Correct the model accordingly to reduce combinatorial explosion in
      automaton tables.
      
      Top znver table sizes in insn-automata.o:
      
      Before:
      
      30056 r znver1_fp_min_issue_delay
      120224 r znver1_fp_transitions
      
      After:
      
      6720 r znver1_fp_min_issue_delay
      53760 r znver1_fp_transitions
      
      gcc/ChangeLog:
      
      	PR target/87832
      	* config/i386/znver.md: (znver1_fp_op_mul): Correct cycles in
      	the reservation.
      	(znver1_fp_op_mul_load): Ditto.
      	(znver1_mmx_mul): Ditto.
      	(znver1_mmx_load): Ditto.
      	(znver1_ssemul_ss_ps): Ditto.
      	(znver1_ssemul_ss_ps_load): Ditto.
      	(znver1_ssemul_avx256_ps): Ditto.
      	(znver1_ssemul_avx256_ps_load): Ditto.
      	(znver1_ssemul_sd_pd): Ditto.
      	(znver1_ssemul_sd_pd_load): Ditto.
      	(znver2_ssemul_sd_pd): Ditto.
      	(znver2_ssemul_sd_pd_load): Ditto.
      	(znver1_ssemul_avx256_pd): Ditto.
      	(znver1_ssemul_avx256_pd_load): Ditto.
      	(znver1_sseimul): Ditto.
      	(znver1_sseimul_avx256): Ditto.
      	(znver1_sseimul_load): Ditto.
      	(znver1_sseimul_avx256_load): Ditto.
      	(znver1_sseimul_di): Ditto.
      	(znver1_sseimul_load_di): Ditto.
      d4cc7a8c
    • Alexander Monakov's avatar
      i386: correct x87&SSE division modeling in znver.md · dd744f06
      Alexander Monakov authored
      Correct modeling of division instructions in the SIMD/FP domain for
      AMD Zen architectures and avoid combinatorial explosion of automaton
      tables by modeling the separate floating-point division unit and
      correcting reservations to reflect reciprocal throughput of the
      corresponding instructions, similar to earlier commit
      5cee5f94 ("i386: correct integer division modeling in znver.md").
      
      Division is partially pipelined and some instructions have fractional
      throughput (e.g. Zen 3 can issue divss and divsd each 3.5 and 4.5
      cycles on average, respectively). Considering these CPUs implement
      out-of-order execution, the model doesn't need to be exact to the last
      cycle, so simplify it by using 4/5 cycles for SF/DF modes, and not
      modeling the fact that FP3 pipe is occupied for one cycle.
      
      Top znver table sizes in insn-automata.o:
      
      Before:
      
      428108 r znver1_fp_min_issue_delay
      856216 r znver1_fp_transitions
      
      After:
      
      30056 r znver1_fp_min_issue_delay
      120224 r znver1_fp_transitions
      
      gcc/ChangeLog:
      
      	PR target/87832
      	* config/i386/znver.md (znver1_fdiv): New automaton.
      	(znver1-fdiv): New unit.
      	(znver1_fp_op_div): Correct unit and cycles in the reservation.
      	(znver1_fp_op_div_load): Ditto.
      	(znver1_fp_op_idiv_load): Ditto.
      	(znver2_fp_op_idiv_load): Ditto.
      	(znver1_ssediv_ss_ps): Ditto.
      	(znver1_ssediv_ss_ps_load): Ditto.
      	(znver1_ssediv_sd_pd): Ditto.
      	(znver1_ssediv_sd_pd_load): Ditto.
      	(znver1_ssediv_avx256_ps): Ditto.
      	(znver1_ssediv_avx256_ps_load): Ditto.
      	(znver1_ssediv_avx256_pd): Ditto.
      	(znver1_ssediv_avx256_pd_load): Ditto.
      dd744f06
    • Jonathan Wakely's avatar
      libstdc++: Fix std::any pretty printer · 3c54805d
      Jonathan Wakely authored
      The recent changes to FilteringTypePrinter affect the result of
      gdb.lookup_type('std::string') in StdExpAnyPrinter, causing it to always
      return the std::__cxx11::basic_string specialization. This then causes a
      gdb.error exception when trying to lookup the std::any manager type for
      a specliaization using that string, but that manager was never
      instantiated in the program. This causes FAILs when running the tests
      with -D_GLIBCXX_USE_CXX11_ABI=0:
      
      FAIL: libstdc++-prettyprinters/libfundts.cc print as
      FAIL: libstdc++-prettyprinters/libfundts.cc print as
      
      The ugly solution used in this patch is to repeat the lookup for every
      type that std::string could be a typedef for, and hope it only works for
      one of them.
      
      libstdc++-v3/ChangeLog:
      
      	* python/libstdcxx/v6/printers.py (StdExpAnyPrinter): Make
      	expansion of std::string in manager name more robust.
      3c54805d
    • Jonathan Wakely's avatar
      libstdc++: Improve comments on pretty printer code · 92281622
      Jonathan Wakely authored
      libstdc++-v3/ChangeLog:
      
      	* python/libstdcxx/v6/printers.py (is_specialization_of): Fix
      	incorrect terminology in docstring and describe arguments.
      	(FilteringTypePrinter): Add default argument for new parameter,
      	enhance docstring.
      92281622
    • Tobias Burnus's avatar
      gcn: Add __builtin_gcn_kernarg_ptr · 6f83861c
      Tobias Burnus authored
      
      Add __builtin_gcn_kernarg_ptr to avoid using hard-coded register values
      and permit future ABI changes while keeping the API.
      
      gcc/ChangeLog:
      
      	* config/gcn/gcn-builtins.def (KERNARG_PTR): Add.
      	* config/gcn/gcn.cc (gcn_init_builtin_types): Change siptr_type_node,
      	sfptr_type_node and voidptr_type_node from FLAT to ADDR_SPACE_DEFAULT.
      	(gcn_expand_builtin_1): Handle GCN_BUILTIN_KERNARG_PTR.
      	(gcn_oacc_dim_size): Return in ADDR_SPACE_FLAT.
      
      libgomp/ChangeLog:
      
      	* config/gcn/team.c (gomp_gcn_enter_kernel): Use
      	__builtin_gcn_kernarg_ptr instead of asm ("s8").
      
      Co-Authored-By: default avatarAndrew Stubbs <ams@codesourcery.com>
      6f83861c
    • David Malcolm's avatar
      analyzer: use known_function to simplify region_model::on_call_{pre,post} · 21501ec7
      David Malcolm authored
      
      Replace lots of repeated checks against strings with a hash_map lookup.
      Add some missing type-checking for handling known functions (e.g. checks
      for pointer types).
      
      gcc/analyzer/ChangeLog:
      	* analyzer.h (known_function::matches_call_types_p): New vfunc.
      	(known_function::impl_call_pre): Provide base implementation.
      	(known_function::impl_call_post): New vfunc.
      	(register_known_functions): New.
      	* engine.cc (impl_run_checkers): Call register_known_functions.
      	* region-model-impl-calls.cc (region_model::impl_call_accept):
      	Convert to...
      	(class known_function_accept): ...this.
      	(region_model::impl_call_bind): Convert to...
      	(class known_function_bind): ...this.
      	(region_model::impl_call_connect): Convert to...
      	(class known_function_connect): ...this.
      	(region_model::impl_call_listen): Convert to...
      	(class known_function_listen): ...this.
      	(region_model::impl_call_socket): Convert to...
      	(class known_function_socket): ...this.
      	(register_known_functions): New.
      	* region-model.cc (region_model::on_call_pre): Remove special
      	case for "bind" in favor of the known_function-handling dispatch.
      	Add call to known_function::matches_call_types_p to latter.
      	(region_model::on_call_post): Remove special cases for "accept",
      	"bind", "connect", "listen", and "socket" in favor of dispatch
      	to known_function::impl_call_post.
      	* region-model.h (region_model::impl_call_accept): Delete decl.
      	(region_model::impl_call_bind): Delete decl.
      	(region_model::impl_call_connect): Delete decl.
      	(region_model::impl_call_listen): Delete decl.
      	(region_model::impl_call_socket): Delete decl.
      	* sm-fd.cc: Update comments.
      
      gcc/testsuite/ChangeLog:
      	* gcc.dg/plugin/analyzer_kernel_plugin.c
      	(copy_across_boundary_fn::matches_call_types_p): New.
      	* gcc.dg/plugin/analyzer_known_fns_plugin.c
      	(known_function_returns_42::matches_call_types_p): New.
      	(known_function_attempt_to_copy::matches_call_types_p): New.
      
      Signed-off-by: default avatarDavid Malcolm <dmalcolm@redhat.com>
      21501ec7
    • David Malcolm's avatar
      analyzer: split out checker-path.cc into a new checker-event.cc · 3685aed8
      David Malcolm authored
      
      gcc/ChangeLog:
      	* Makefile.in (ANALYZER_OBJS): Add analyzer/checker-event.o.
      
      gcc/analyzer/ChangeLog:
      	* checker-event.cc: New file, split out from...
      	* checker-path.cc: ...this file.
      
      Signed-off-by: default avatarDavid Malcolm <dmalcolm@redhat.com>
      3685aed8
    • Max Filippov's avatar
      gcc: m68k: fix PR target/107645 · 99c9cbcc
      Max Filippov authored
      gcc/
      	PR target/107645
      	* config/m68k/predicates.md (symbolic_operand): Return false
      	when UNSPEC is under the CONST node.
      99c9cbcc
    • Christoph Müllner's avatar
      doc: invoke: pru/riscv: Fix option list formatting · f58e6d42
      Christoph Müllner authored
      This patch fixes a wrong placed closing bracket in the RISC-V option
      list and an unneeded @gol in the PRU option list in invoke.texi.
      
      gcc/ChangeLog:
      
      	* doc/invoke.texi: Fix PRU/RISC-V option list formatting.
      f58e6d42
    • Jakub Jelinek's avatar
      c++: Implement CWG 2654 - Un-deprecation of compound volatile assignments · 13602905
      Jakub Jelinek authored
      The following patch implements CWG 2654.
      
      2022-11-16  Jakub Jelinek  <jakub@redhat.com>
      
      	* typeck.cc (cp_build_modify_expr): Implement CWG 2654
      	- Un-deprecation of compound volatile assignments.  Remove
      	-Wvolatile warning about compound volatile assignments.
      
      	* g++.dg/cpp2a/volatile1.C (fn2, fn3, racoon): Adjust expected
      	diagnostics.
      	* g++.dg/cpp2a/volatile3.C (fn2, fn3, racoon): Likewise.
      	* g++.dg/cpp2a/volatile5.C (f): Likewise.
      	* g++.dg/ext/vector25.C (foo): Don't expect a warning.
      	* g++.dg/cpp1y/new1.C (test_unused): Likewise.
      13602905
    • Tobias Burnus's avatar
      nvptx/mkoffload.cc: Fix "$nohost" check · d59858f6
      Tobias Burnus authored
      If lhd_set_decl_assembler_name is invoked - in particular if
      !TREE_PUBLIC (decl) && !DECL_FILE_SCOPE_P (decl) - the '.nohost' suffix
      might change to '.nohost.2'. This happens for the existing reverse offload
      testcases via cgraph_node::analyze and is a side effect of
      r13-3455-g178ac530fe67e4f2fc439cc4ce89bc19d571ca31 for some reason.
      
      The solution is to not only check for a tailing '$nohost' but also for
      '$nohost$' in nvptx/mkoffload.cc.
      
      gcc/ChangeLog:
      
      	* config/nvptx/mkoffload.cc (process): Recognize '$nohost$...'
      	besides tailing '$nohost' as being for reverse offload.
      d59858f6
    • Jakub Jelinek's avatar
      c++: Allow attributes on concepts - DR 2428 · 7f014022
      Jakub Jelinek authored
      The following patch adds parsing of attributes to concept definition,
      allows deprecated attribute to be specified (as CONCEPT_DECL now needs
      to be checked in c-family/c-attribs.cc, I had to move its declaration
      from cp/*.def to c-family/*.def) and checks TREE_DEPRECATED in
      build_standard_check (not sure if that is the right spot, or whether
      it shouldn't be checked also for variable and function concepts and
      how to write testcase coverage for that).
      
      2022-11-16  Jakub Jelinek  <jakub@redhat.com>
      
      gcc/c-family/
      	* c-common.def (CONCEPT_DECL): New tree, moved here from
      	cp-tree.def.
      	* c-common.cc (c_common_init_ts): Handle CONCEPT_DECL.
      	* c-attribs.cc (handle_deprecated_attribute): Allow deprecated
      	attribute on CONCEPT_DECL.
      gcc/cp/
      	* cp-tree.def (CONCEPT_DECL): Move to c-common.def.
      	* cp-objcp-common.cc (cp_common_init_ts): Don't handle CONCEPT_DECL
      	here.
      	* cp-tree.h (finish_concept_definition): Add ATTRS parameter.
      	* parser.cc (cp_parser_concept_definition): Parse attributes in
      	between identifier and =.  Adjust finish_concept_definition
      	caller.
      	* pt.cc (finish_concept_definition): Add ATTRS parameter.  Call
      	cplus_decl_attributes.
      	* constraint.cc (build_standard_check): If CONCEPT_DECL is
      	TREE_DEPRECATED, emit -Wdeprecated-declaration warnings.
      gcc/testsuite/
      	* g++.dg/cpp2a/concepts-dr2428.C: New test.
      7f014022
    • Jakub Jelinek's avatar
      ragen-op-float: Fix up float_binary_op_range_finish [PR107668] · 7c6cd9c0
      Jakub Jelinek authored
      The following testcase ICEs, because when !HONOR_NANS but
      HONOR_SIGNED_ZEROS, if we see
      lhs = op1 * op2;
      and know that lhs is [-0.0, 0.0] and op2 is [0.0, 0.0], the
      division of these two yields UNDEFINED and clear_nan () on it
      fails an assert.  With HONOR_NANS it would actually result in
      a known NAN, but when NANs aren't honored, we clear the NAN bits.
      Now, for the above case we actually don't know anything about
      the op1 range (except that it isn't a NAN/INF because of
      !HONOR_NANS !HONOR_INFINITIES), so I think the best is just
      to return VARYING for the case we get UNDEFINED as well.
      
      If we want, the op[12]_range methods perhaps can handle the
      corner cases earlier separately, say for
      lhs [0.0, 0.0] and op2 [0.0, 0.0] when HONOR_SIGNED_ZEROS this
      would be just [0.0, MAX].
      
      2022-11-16  Jakub Jelinek  <jakub@redhat.com>
      
      	PR tree-optimization/107668
      	* range-op-float.cc (float_binary_op_range_finish): Set VARYING
      	also when r is UNDEFINED.
      
      	* gcc.dg/ubsan/pr107668.c: New test.
      7c6cd9c0
    • François Dumont's avatar
      libstdc++: Fix gdb FilteringTypePrinter · 2b7f0378
      François Dumont authored
      Once we found a matching FilteringTypePrinter instance we look for the associated
      typedef and check that the returned Python Type is equal to the Type to recognize.
      But gdb Python Type includes properties to distinguish a typedef from the actual
      type. So use gdb.types.get_basic_type to check if we are indeed on the same type.
      
      Additionnaly enhance FilteringTypePrinter matching mecanism by introducing targ1 that,
      if not None, will be used as the 1st template parameter.
      
      libstdc++-v3/ChangeLog:
      
      	* python/libstdcxx/v6/printers.py (FilteringTypePrinter): Rename 'match' field
      	'template'. Add self.targ1 to specify the first template parameter of the instantiation
      	to match.
      	(add_one_type_printer): Add targ1 optional parameter, default to None.
      	Use gdb.types.get_basic_type to compare the type to recognize and the type
      	returned from the typedef lookup.
      	(register_type_printers): Adapt calls to add_one_type_printers.
      2b7f0378
    • Kewen Lin's avatar
      rtl: Try to remove EH edges after {pro,epi}logue generation [PR90259] · 63e1b2e7
      Kewen Lin authored
      After prologue and epilogue generation, the judgement on whether
      one memory access onto stack frame may trap or not could change,
      since we get more exact stack information by now.
      
      As PR90259 shows, some memory access becomes impossible to trap
      any more after prologue and epilogue generation, it can make
      subsequent optimization be able to remove it if safe, but it
      results in unexpected control flow status due to REG_EH_REGION
      note missing.
      
      This patch proposes to try to remove EH edges with function
      purge_all_dead_edges after prologue and epilogue generation,
      it simplifies CFG as early as we can and don't need any fixup
      in downstream passes.
      
      CFG simplification result with PR90259's case as example:
      
      *before*
      
         18: %1:TF=call [`__gcc_qdiv'] argc:0
            REG_EH_REGION 0x2
         77: NOTE_INSN_BASIC_BLOCK 3
         19: NOTE_INSN_DELETED
         20: NOTE_INSN_DELETED
        110: [%31:SI+0x20]=%1:DF
            REG_EH_REGION 0x2
        116: NOTE_INSN_BASIC_BLOCK 4
        111: [%31:SI+0x28]=%2:DF
            REG_EH_REGION 0x2
         22: NOTE_INSN_BASIC_BLOCK 5
        108: %0:DF=[%31:SI+0x20]
            REG_EH_REGION 0x2
        117: NOTE_INSN_BASIC_BLOCK 6
        109: %1:DF=[%31:SI+0x28]
            REG_EH_REGION 0x2
         79: NOTE_INSN_BASIC_BLOCK 7
         26: [%31:SI+0x18]=%0:DF
        104: pc=L69
        105: barrier
      
      *after*
      
         18: %1:TF=call [`__gcc_qdiv'] argc:0
            REG_EH_REGION 0x2
         77: NOTE_INSN_BASIC_BLOCK 3
         19: NOTE_INSN_DELETED
         20: NOTE_INSN_DELETED
        110: [%31:SI+0x20]=%1:DF
        111: [%31:SI+0x28]=%2:DF
        108: %0:DF=[%31:SI+0x20]
        109: %1:DF=[%31:SI+0x28]
         26: [%31:SI+0x18]=%0:DF
        104: pc=L69
        105: barrier
      
      	PR rtl-optimization/90259
      
      gcc/ChangeLog:
      
      	* function.cc (rest_of_handle_thread_prologue_and_epilogue): Add
      	parameter fun, and call function purge_all_dead_edges.
      	(pass_thread_prologue_and_epilogue::execute): Name unamed parameter
      	as fun, and use it for rest_of_handle_thread_prologue_and_epilogue.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.target/powerpc/pr90259.C: New.
      63e1b2e7
    • GCC Administrator's avatar
      Daily bump. · cdc34229
      GCC Administrator authored
      cdc34229
  2. Nov 15, 2022
    • Marek Polacek's avatar
      c++: Disable -Wignored-qualifiers for template args [PR107492] · ed1797dd
      Marek Polacek authored
      It seems wrong to issue a -Wignored-qualifiers warning for code like:
      
        static_assert(!is_same_v<void(*)(), const void(*)()>);
      
      because there the qualifier matters.  Likewise in template
      specialization:
      
        template<typename T> struct S { };
        template<> struct S<void(*)()> { };
        template<> struct S<const void(*)()> { }; // OK, not a redefinition
      
      And likewise in other type-id contexts such as trailing-return-type:
      
        auto g() -> const void (*)();
      
      This patch limits the warning to the function declaration context only.
      
      	PR c++/107492
      
      gcc/cp/ChangeLog:
      
      	* decl.cc (grokdeclarator): Only emit a -Wignored-qualifiers warning
      	when funcdecl_p.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/warn/Wignored-qualifiers3.C: New test.
      ed1797dd
    • Philipp Tomsich's avatar
      RISC-V: Zihintpause: add __builtin_riscv_pause · c717a92d
      Philipp Tomsich authored
      The Zihintpause extension uses an opcode from the 'fence' opcode range
      to add a true hint instruction (i.e. if it is not supported on any
      given platform, the 'fence' that is encoded will not enforce any
      specific ordering on memory accesses) for entering a low-power state
      (e.g. in an idle thread).  We expose this new instruction through a
      machine-dependent builtin to allow generating it without a requirement
      for any inline assembly.
      
      Given that the encoding of 'pause' is valid (as a 'fence' encoding)
      even for processors that do not (yet) support Zihintpause, we make
      this builtin available without any further TARGET_* constraints.
      
      gcc/ChangeLog:
      
      	* config/riscv/riscv-builtins.cc (struct riscv_builtin_description):
      	add the pause machine-dependent builtin with no result and no
      	arguments; mark it as always present (pause is a true hint
      	that encodes into a fence-insn, if not supported with the new
      	pause semantics).
      	* config/riscv/riscv-ftypes.def: Add type for void -> void.
      	* config/riscv/riscv.md (riscv_pause): Add risc_pause and
      	UNSPECV_PAUSE
      	* doc/extend.texi: Document __builtin_riscv_pause.
      	* optabs.cc (maybe_gen_insn): Allow nops == 0 (void -> void).
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.target/riscv/builtin_pause.c: New test.
      c717a92d
    • David Faust's avatar
      bpf: avoid possible use of uninitialized variable · 6052482f
      David Faust authored
      Fix a maybe-uninitialized warning introduced in commit:
      068baae1 bpf: add preserve_field_info builtin
      
      gcc/
      
      	* config/bpf/bpf.cc (bpf_expand_builtin): Avoid use of uninitialized
      	variable in error case.
      6052482f
    • David Malcolm's avatar
      analyzer: add warnings relating to sockets [PR106140] · 86a90006
      David Malcolm authored
      
      This patch generalizes the analyzer's file descriptor state machine
      so that it tracks the states of sockets.
      
      It adds two new warnings relating to misuses of socket APIs:
      * -Wanalyzer-fd-phase-mismatch (e.g. calling 'accept' on a socket
      before calling 'listen' on it)
      * -Wanalyzer-fd-type-mismatch (e.g. using a stream socket operation
      on a datagram socket)
      
      gcc/analyzer/ChangeLog:
      	PR analyzer/106140
      	* analyzer-language.cc (on_finish_translation_unit): Stash named
      	constants "SOCK_STREAM" and "SOCK_DGRAM".
      	* analyzer.opt (Wanalyzer-fd-phase-mismatch): New.
      	(Wanalyzer-fd-type-mismatch): New.
      	* engine.cc (impl_region_model_context::get_state_map_by_name):
      	Add "out_sm_context" param.  Allow out_sm_idx to be NULL.
      	* exploded-graph.h
      	(impl_region_model_context::get_state_map_by_name):
      	Add "out_sm_context" param.
      	* region-model-impl-calls.cc (region_model::impl_call_accept): New.
      	(region_model::impl_call_bind): New.
      	(region_model::impl_call_connect): New.
      	(region_model::impl_call_listen): New.
      	(region_model::impl_call_socket): New.
      	* region-model.cc (region_model::on_call_pre): Special-case
      	"bind".
      	(region_model::on_call_post): Special-case "accept", "bind",
      	"connect", "listen", and "socket".
      	* region-model.h (region_model::impl_call_accept): New decl.
      	(region_model::impl_call_bind): New decl.
      	(region_model::impl_call_connect): New decl.
      	(region_model::impl_call_listen): New decl.
      	(region_model::impl_call_socket): New decl.
      	(region_model::on_socket): New decl.
      	(region_model::on_bind): New decl.
      	(region_model::on_listen): New decl.
      	(region_model::on_accept): New decl.
      	(region_model::on_connect): New decl.
      	(region_model::add_constraint): Make public.
      	(region_model::check_for_poison): Make public.
      	(region_model_context::get_state_map_by_name): Add out_sm_context param.
      	(region_model_context::get_fd_map): Likewise.
      	(region_model_context::get_malloc_map): Likewise.
      	(region_model_context::get_taint_map): Likewise.
      	(noop_region_model_context::get_state_map_by_name): Likewise.
      	(region_model_context_decorator::get_state_map_by_name): Likewise.
      	* sm-fd.cc: Include "analyzer/supergraph.h" and
      	"analyzer/analyzer-language.h".
      	(enum expected_phase): New enum.
      	(fd_state_machine::m_new_datagram_socket): New.
      	(fd_state_machine::m_new_stream_socket): New.
      	(fd_state_machine::m_new_unknown_socket): New.
      	(fd_state_machine::m_bound_datagram_socket): New.
      	(fd_state_machine::m_bound_stream_socket): New.
      	(fd_state_machine::m_bound_unknown_socket): New.
      	(fd_state_machine::m_listening_stream_socket): New.
      	(fd_state_machine::m_m_connected_stream_socket): New.
      	(fd_state_machine::m_SOCK_STREAM): New.
      	(fd_state_machine::m_SOCK_DGRAM): New.
      	(fd_diagnostic::describe_state_change): Handle socket states.
      	(fd_diagnostic::get_meaning_for_state_change): Likewise.
      	(class fd_phase_mismatch): New.
      	(enum expected_type): New enum.
      	(class fd_type_mismatch): New.
      	(fd_state_machine::fd_state_machine): Initialize new states and
      	stashed named constants.
      	(fd_state_machine::is_socket_fd_p): New.
      	(fd_state_machine::is_datagram_socket_fd_p): New.
      	(fd_state_machine::is_stream_socket_fd_p): New.
      	(fd_state_machine::on_close): Handle the socket states.
      	(fd_state_machine::check_for_open_fd): Complain about fncalls on
      	sockets in the wrong phase.  Support socket FDs.
      	(add_constraint_ge_zero): New.
      	(fd_state_machine::get_state_for_socket_type): New.
      	(fd_state_machine::on_socket): New.
      	(fd_state_machine::check_for_socket_fd): New.
      	(fd_state_machine::check_for_new_socket_fd): New.
      	(fd_state_machine::on_bind): New.
      	(fd_state_machine::on_listen): New.
      	(fd_state_machine::on_accept): New.
      	(fd_state_machine::on_connect): New.
      	(fd_state_machine::can_purge_p): Don't purge socket values.
      	(get_fd_state): New.
      	(region_model::mark_as_valid_fd): Use get_fd_state.
      	(region_model::on_socket): New.
      	(region_model::on_bind): New.
      	(region_model::on_listen): New.
      	(region_model::on_accept): New.
      	(region_model::on_connect): New.
      	* sm-fd.dot: Update to reflect sm-fd.cc changes.
      
      gcc/ChangeLog:
      	PR analyzer/106140
      	* doc/invoke.texi (Static Analyzer Options): Add
      	-Wanalyzer-fd-phase-mismatch and -Wanalyzer-fd-type-mismatch.  Add
      	"socket", "bind", "listen", "accept", and "connect" to the list of
      	functions known to the analyzer.
      
      gcc/testsuite/ChangeLog:
      	PR analyzer/106140
      	* gcc.dg/analyzer/fd-accept.c: New test.
      	* gcc.dg/analyzer/fd-bind.c: New test.
      	* gcc.dg/analyzer/fd-connect.c: New test.
      	* gcc.dg/analyzer/fd-datagram-socket.c: New test.
      	* gcc.dg/analyzer/fd-glibc-byte-stream-connection-server.c: New test.
      	* gcc.dg/analyzer/fd-glibc-byte-stream-socket.c: New test.
      	* gcc.dg/analyzer/fd-glibc-datagram-client.c: New test.
      	* gcc.dg/analyzer/fd-glibc-datagram-socket.c: New test.
      	* gcc.dg/analyzer/fd-glibc-make_named_socket.h: New test.
      	* gcc.dg/analyzer/fd-listen.c: New test.
      	* gcc.dg/analyzer/fd-manpage-getaddrinfo-client.c: New test.
      	* gcc.dg/analyzer/fd-mappage-getaddrinfo-server.c: New test.
      	* gcc.dg/analyzer/fd-socket-meaning.c: New test.
      	* gcc.dg/analyzer/fd-socket-misuse.c: New test.
      	* gcc.dg/analyzer/fd-stream-socket-active-open.c: New test.
      	* gcc.dg/analyzer/fd-stream-socket-passive-open.c: New test.
      	* gcc.dg/analyzer/fd-stream-socket.c: New test.
      	* gcc.dg/analyzer/fd-symbolic-socket.c: New test.
      	* gcc.dg/analyzer/pr104369-1.c: Add -Wno-analyzer-too-complex and
      	-Wno-analyzer-fd-leak to options.
      	* gcc.dg/analyzer/pr104369-2.c: Add -Wno-analyzer-fd-leak to
      	options.
      
      Signed-off-by: default avatarDavid Malcolm <dmalcolm@redhat.com>
      86a90006
    • David Malcolm's avatar
      c, analyzer: support named constants in analyzer [PR106302] · d8aba860
      David Malcolm authored
      The analyzer's file-descriptor state machine tracks the access mode of
      opened files, so that it can emit -Wanalyzer-fd-access-mode-mismatch.
      
      To do this, its symbolic execution needs to "know" the values of the
      constants "O_RDONLY", "O_WRONLY", and "O_ACCMODE".  Currently
      analyzer/sm-fd.cc simply uses these values directly from the build-time
      header files, but these are the values on the host, not those from the
      target, which could be different (PR analyzer/106302).
      
      In an earlier discussion of this issue:
        https://gcc.gnu.org/pipermail/gcc/2022-June/238954.html
      
      
      we talked about adding a target hook for this.
      
      However, I've also been experimenting with extending the fd state
      machine to track sockets (PR analyzer/106140).  For this, it's useful to
      "know" the values of the constants "SOCK_STREAM" and "SOCK_DGRAM".
      Unfortunately, these seem to have many arbitrary differences from target
      to target.
      
      For example: Linux/glibc general has SOCK_STREAM == 1, SOCK_DGRAM == 2,
      as does AIX, but annoyingly, e.g. Linux on MIPS has them the other way
      around.
      
      It seems to me that as the analyzer grows more ambitious modeling of the
      behavior of APIs (perhaps via plugins) it's more likely that the
      analyzer will need to know the values of named constants, which might
      not even exist on the host.
      
      For example, at LPC it was suggested to me that -fanalyzer could check
      rules about memory management inside the Linux kernel (probably via a
      plugin), but doing so involves a bunch of GFP_* flags (see PR 107472).
      
      So rather than trying to capture all this knowledge in a target hook,
      this patch attempts to get at named constant values from the user's
      source code.
      
      The patch adds an interface for frontends to call into the analyzer as
      the translation unit finishes.  The analyzer can then call back into the
      frontend to ask about the values of the named constants it cares about
      whilst the frontend's data structures are still around.
      
      The patch implements this for the C frontend, which looks up the names
      by looking for named CONST_DECLs (which handles enum values).  Failing
      that, it attempts to look up the values of macros but only the simplest
      cases are supported (a non-traditional macro with a single CPP_NUMBER
      token).  It does this by building a buffer containing the macro
      definition and rerunning a lexer on it.
      
      The analyzer gracefully handles the cases where named values aren't
      found (such as anything more complicated than described above).
      
      The patch ports the analyzer to use this mechanism for "O_RDONLY",
      "O_WRONLY", and "O_ACCMODE".  I have successfully tested my socket patch
      to also use this for "SOCK_STREAM" and "SOCK_DGRAM", so the technique
      seems to work.
      
      gcc/ChangeLog:
      	PR analyzer/106302
      	* Makefile.in (ANALYZER_OBJS): Add analyzer/analyzer-language.o.
      	(GTFILES): Add analyzer/analyzer-language.cc.
      	* doc/analyzer.texi: Document __analyzer_dump_named_constant.
      
      gcc/analyzer/ChangeLog:
      	PR analyzer/106302
      	* analyzer-language.cc: New file.
      	* analyzer-language.h: New file.
      	* analyzer.h (get_stashed_constant_by_name): New decl.
      	(log_stashed_constants): New decl.
      	* engine.cc (impl_run_checkers): Call log_stashed_constants.
      	* region-model-impl-calls.cc
      	(region_model::impl_call_analyzer_dump_named_constant): New.
      	* region-model.cc (region_model::on_stmt_pre): Handle
      	__analyzer_dump_named_constant.
      	* region-model.h
      	(region_model::impl_call_analyzer_dump_named_constant): New decl.
      	* sm-fd.cc (fd_state_machine::m_O_ACCMODE): New.
      	(fd_state_machine::m_O_RDONLY): New.
      	(fd_state_machine::m_O_WRONLY): New.
      	(fd_state_machine::fd_state_machine): Initialize the new fields.
      	(fd_state_machine::get_access_mode_from_flag): Use the new fields,
      	rather than using the host values.
      
      gcc/c/ChangeLog:
      	PR analyzer/106302
      	* c-parser.cc: Include "analyzer/analyzer-language.h" and "toplev.h".
      	(class ana::c_translation_unit): New.
      	(c_parser_translation_unit): Call ana::on_finish_translation_unit.
      
      gcc/testsuite/ChangeLog:
      	* gcc.dg/analyzer/analyzer-decls.h
      	(__analyzer_dump_named_constant): New decl.
      	* gcc.dg/analyzer/fd-4.c (void): Likewise.
      	(O_ACCMODE): Define.
      	* gcc.dg/analyzer/fd-access-mode-enum.c: New test, based on .
      	* gcc.dg/analyzer/fd-5.c: ...this.  Rename to...
      	* gcc.dg/analyzer/fd-access-mode-macros.c: ...this.
      	(O_ACCMODE): Define.
      	* gcc.dg/analyzer/fd-access-mode-target-headers.c: New test, also
      	based on fd-5.c.
      	(test_sm_fd_constants): New.
      	* gcc.dg/analyzer/fd-dup-1.c (O_ACCMODE): Define.
      	* gcc.dg/analyzer/named-constants-via-enum.c: New test.
      	* gcc.dg/analyzer/named-constants-via-enum-and-macro.c: New test.
      	* gcc.dg/analyzer/named-constants-via-macros-2.c: New test.
      	* gcc.dg/analyzer/named-constants-via-macros.c: New test.
      
      Signed-off-by: default avatarDavid Malcolm <dmalcolm@redhat.com>
      d8aba860
    • Nathan Sidwell's avatar
      demangler: Templated lambda demangling · 46c3d9c8
      Nathan Sidwell authored
      Templated lambdas have a template-head, which is part of their
      signature.  GCC ABI 18 mangles that into the lambda name.  This adds
      support to the demangler.  We have to introduce artificial template
      parameter names, as we need to refer to them from later components of
      the lambda signature. We use $T:n, $N:n and $TT:n for type, non-type
      and template parameters.  Non-type parameter names are not shown in
      the strictly correct location -- for instance 'int (&NT) ()' would be
      shown as 'int (&) $N:n'.  That's unfortunate, but an orthogonal issue.
      The 'is_lambda_arg' field is now repurposed as indicating the number
      of explicit template parameters (1-based).
      
      	include/
      	* demangle.h (enum demangle_component_type): Add
      	DEMANGLE_COMPONENT_TEMPLATE_HEAD,
      	DEMANGLE_COMPONENT_TEMPLATE_TYPE_PARM,
      	DEMANGLE_COMPONENT_TEMPLATE_NON_TYPE_PARM,
      	DEMANGLE_COMPONENT_TEMPLATE_TEMPLATE_PARM,
      	DEMANGLE_COMPONENT_TEMPLATE_PACK_PARM.
      	libiberty/
      	* cp-demangle.c (struct d_print_info): Rename is_lambda_arg to
      	lambda_tpl_parms.  Augment semantics.
      	(d_make_comp): Add checks for new components.
      	(d_template_parm, d_template_head): New.
      	(d_lambda): Add templated lambda support.
      	(d_print_init): Adjust.
      	(d_print_lambda_parm_name): New.
      	(d_print_comp_inner): Support templated lambdas,
      	* testsuite/demangle-expected: Add testcases.
      46c3d9c8
    • Lewis Hyatt's avatar
      diagnostics: Remove null-termination requirement for json::string · ee08aa9a
      Lewis Hyatt authored
      json::string currently handles null-terminated data and so can't work with
      data that may contain embedded null bytes or that is not null-terminated.
      Supporting such data will make json::string more robust in some contexts, such
      as SARIF output, which uses it to output user source code that may contain
      embedded null bytes.
      
      gcc/ChangeLog:
      
      	* json.h (class string): Add M_LEN member to store the length of
      	the data.  Add constructor taking an explicit length.
      	* json.cc (string::string):  Implement the new constructor.
      	(string::print): Support printing strings that are not
      	null-terminated.  Escape embdedded null bytes on output.
      	(test_writing_strings): Test the new null-byte-related features of
      	json::string.
      ee08aa9a
    • Lewis Hyatt's avatar
      diagnostics: Use an inline function rather than hardcoding <built-in> string · 15d31555
      Lewis Hyatt authored
      The string "<built-in>" is hard-coded in several places throughout the
      diagnostics code, and in some of those places, it is used incorrectly with
      respect to internationalization. (Comparing a translated string to an
      untranslated string.) The error is not currently observable in any output GCC
      actually produces, hence no testcase added here, but it's worth fixing, and
      also, I am shortly going to add a new such string and want to avoid hardcoding
      that one in similar places.
      
      gcc/c-family/ChangeLog:
      
      	* c-opts.cc (c_finish_options): Use special_fname_builtin () rather
      	than a hard-coded string.
      
      gcc/ChangeLog:
      
      	* diagnostic.cc (diagnostic_get_location_text): Use
      	special_fname_builtin () rather than a hardcoded string (which was
      	also incorrectly left untranslated previously.)
      	* input.cc (special_fname_builtin): New function.
      	(expand_location_1): Use special_fname_builtin () rather than a
      	hard-coded string.
      	(test_builtins): Likewise.
      	* input.h (special_fname_builtin): Declare.
      
      gcc/fortran/ChangeLog:
      
      	* cpp.cc (gfc_cpp_init): Use special_fname_builtin () rather than a
      	hardcoded string (which was also incorrectly left untranslated
      	previously.)
      	* error.cc (gfc_diagnostic_build_locus_prefix): Likewise.
      	* f95-lang.cc (gfc_init): Likewise.
      15d31555
    • Lewis Hyatt's avatar
      diagnostics: Fix macro tracking for ad-hoc locations · 6238cc20
      Lewis Hyatt authored
      The result of linemap_resolve_location() can be an ad-hoc location, if that is
      what was stored in a relevant macro map.  maybe_unwind_expanded_macro_loc()
      did not previously handle this case, causing it to print the wrong tracking
      information for an example such as the new testcase macro-trace-1.c.  Fix that
      by checking for ad-hoc locations where needed.
      
      gcc/ChangeLog:
      
      	* tree-diagnostic.cc (maybe_unwind_expanded_macro_loc): Handle ad-hoc
      	location in return value of linemap_resolve_location().
      
      gcc/testsuite/ChangeLog:
      
      	* c-c++-common/cpp/macro-trace-1.c: New test.
      6238cc20
    • Martin Liska's avatar
      libsanitizer: update LOCAL_PATCHES · 3037f11f
      Martin Liska authored
      libsanitizer/ChangeLog:
      
      	* LOCAL_PATCHES: Update local patches.
      3037f11f
    • Martin Liska's avatar
      asan: update expected format based on ASAN · f5468467
      Martin Liska authored
      gcc/testsuite/ChangeLog:
      
      	* c-c++-common/asan/global-overflow-1.c: Update
      	expected format.
      	* c-c++-common/asan/heap-overflow-1.c: Likewise.
      	* c-c++-common/asan/strlen-overflow-1.c: Likewise.
      	* c-c++-common/asan/strncpy-overflow-1.c: Likewise.
      	* c-c++-common/hwasan/heap-overflow.c: Likewise.
      	* g++.dg/asan/asan_mem_test.cc: Likewise.
      	* g++.dg/asan/asan_oob_test.cc: Likewise.
      	* g++.dg/asan/asan_str_test.cc: Likewise.
      	* g++.dg/asan/asan_test.cc: Likewise.
      	* g++.dg/asan/large-func-test-1.C: Likewise.
      f5468467
    • Martin Liska's avatar
      libsanitizer: Apply local patches · 0c7a9288
      Martin Liska authored
      0c7a9288
    • Martin Liska's avatar
    • Wilco Dijkstra's avatar
      libatomic: Add support for LSE and LSE2 · d1288d85
      Wilco Dijkstra authored
      Add support for AArch64 LSE and LSE2 to libatomic.  Disable outline atomics,
      and use LSE ifuncs for 1-8 byte atomics and LSE2 ifuncs for 16-byte atomics.
      On Neoverse V1, 16-byte atomics are ~4x faster due to avoiding locks.
      
      Note this is safe since we swap all 16-byte atomics using the same ifunc,
      so they either use locks or LSE2 atomics, but never a mix. This also improves
      ABI compatibility with LLVM: its inlined 16-byte atomics are compatible with
      the new libatomic if LSE2 is supported.
      
      libatomic/
      	* Makefile.in: Regenerated with automake 1.15.1.
      	* Makefile.am: Add atomic_16.S for AArch64.
      	* configure.tgt: Disable outline atomics in AArch64 build.
      	* config/linux/aarch64/atomic_16.S: New file - implementation of
      	ifuncs for 16-byte atomics.
      	* config/linux/aarch64/host-config.h: Enable ifuncs, use LSE
      	(HWCAP_ATOMICS) for 1-8-byte atomics and LSE2 (HWCAP_USCAT) for
      	16-byte atomics.
      d1288d85
    • Patrick Palka's avatar
      c++: remove i_c_e_p parm from tsubst_copy_and_build · 5925f0ec
      Patrick Palka authored
      It seems the only and original purpose of tsubst_copy_and_build's
      integral_constant_expression_p boolean parameter (added in r116276, which
      predates the constexpr machinery) is to diagnose certain constructs that
      aren't allowed to appear in a C++98 integral constant expression
      context, specifically casts to a non-integral type (diagnosed from the
      *_CAST_EXPR case of tsubst_copy_and_build) or dependent names that
      resolve to a non-constant decl (diagnosed from the IDENTIFIER_NODE case
      of tsubst_copy_and_build).  The parameter has no effect outside of C++98
      AFAICT.
      
      But diagnosing such constructs should arguably be the job of the constexpr
      machinery (e.g. is_constant_expression) after substitution, and doing it
      during substitution by way of an additional parameter complicates the
      API of this workhorse function for what amounts to a couple of archaic
      C++98 restrictions.  And it seems is_constant_expression already does a
      good job of diagnosing the aforementioned two constructs in C++98 mode,
      at least as far as our testsuite is concerned.
      
      So this patch removes this parameter from tsubst_copy_and_build,
      tsubst_expr and tsubst_copy_and_build_call_args.  The only interesting
      changes are to potential_constant_expression_1 and the IDENTIFIER_NODE
      and *_CAST_EXPR cases of tsubst_copy_and_build; the rest are mechanical
      adjustments to the functions' signatures and their call sites.
      
      gcc/cp/ChangeLog:
      
      	* constexpr.cc (potential_constant_expression_1)
      	<case *_CAST_EXPR>: Use
      	cast_valid_in_integral_constant_expression_p instead of
      	open coding it.
      	* constraint.cc (tsubst_valid_expression_requirement): Adjust
      	calls to tsubst_copy_and_build and tsubst_expr.
      	(tsubst_constraint): Likewise.
      	(satisfy_atom): Likewise.
      	(diagnose_trait_expr): Likewise.
      	* cp-tree.h (tsubst_copy_and_build): Remove i_c_e_p parameter.
      	(tsubst_expr): Likewise.
      	* init.cc (get_nsdmi): Adjust calls to tsubst_copy_and_build
      	and tsubst_expr.
      	* pt.cc (expand_integer_pack): Likewise.
      	(instantiate_non_dependent_expr_internal): Likewise.
      	(tsubst_friend_function): Likewise.
      	(tsubst_attribute): Likewise.
      	(instantiate_class_template): Likewise.
      	(tsubst_template_arg): Likewise.
      	(gen_elem_of_pack_expansion_instantiation): Likewise.
      	(tsubst_fold_expr_init): Likewise.
      	(tsubst_pack_expansion): Likewise.
      	(tsubst_default_argument): Likewise.
      	(tsubst_function_decl): Likewise.
      	(tsubst_decl): Likewise.
      	(tsubst_arg_types): Likewise.
      	(tsubst_exception_specification): Likewise.
      	(tsubst): Likewise.
      	(tsubst_init): Likewise.
      	(tsubst_copy): Likewise.
      	(tsubst_omp_clause_decl): Likewise.
      	(tsubst_omp_clauses): Likewise.
      	(tsubst_copy_asm_operands): Likewise.
      	(tsubst_omp_for_iterator): Likewise.
      	(tsubst_expr): Likewise.  Remove i_c_e_p parameter.
      	(tsubst_omp_udr): Likewise.
      	(tsubst_non_call_postfix_expression): Likewise.  Remove i_c_e_p parameter.
      	(tsubst_lambda_expr): Likewise.
      	(tsubst_copy_and_build_call_args): Likewise.
      	(tsubst_copy_and_build): Likewise.  Remove i_c_e_p parameter.
      	<case IDENTIFIER_NODE>: Adjust call to finish_id_expression
      	following removal of i_c_e_p.
      	<case *_CAST_EXPR>: Remove C++98-specific cast validity check
      	guarded by i_c_e_p.
      	(maybe_instantiate_noexcept): Adjust calls to
      	tsubst_copy_and_build and tsubst_expr.
      	(instantiate_body): Likewise.
      	(instantiate_decl): Likewise.
      	(tsubst_initializer_list): Likewise.
      	(tsubst_enum): Likewise.
      
      gcc/objcp/ChangeLog:
      
      	* objcp-lang.cc (objcp_tsubst_copy_and_build): Adjust calls to
      	tsubst_copy_and_build and tsubst_expr.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/template/crash55.C: Don't expect additional
      	C++98-specific diagnostics.
      	* g++.dg/template/ref3.C: Remove C++98-specific xfail.
      5925f0ec
    • Patrick Palka's avatar
      c++: remove function_p parm from tsubst_copy_and_build · c52c3226
      Patrick Palka authored
      The function_p parameter of tsubst_copy_and_build (added in r69316) is
      inspected only in its IDENTIFIER_NODE case, where it controls whether we
      diagnose unqualified name lookup failure for the given identifier.  But
      I think ever since r173965, we never substitute an IDENTIFIER_NODE with
      function_p=true for which the lookup can possibly fail, and therefore
      the flag is effectively unneeded.
      
      Before that commit, we would incorrectly repeat unqualified lookup for
      an ADL-enabled CALL_EXPR at instantiation time, which naturally could
      fail and thus motivated the flag.  Afterwards, we no longer substitute
      an IDENTIFIER_NODE callee when koenig_p is true, so the flag isn't needed
      for its original purpose.  What about when koenig_p=false?  Apparently
      we still may have an IDENTIFIER_NODE callee in this case, namely when
      unqualified name lookup found a dependent local function declaration,
      but repeating that lookup can't fail (ditto for USING_DECL callees).
      
      So this patch removes this effectively unneeded parameter from
      tsubst_copy_and_build.  It also updates an outdated comment in the
      CALL_EXPR case about when we may see an IDENTIFIER_NODE callee with
      koenig_p=false.
      
      gcc/cp/ChangeLog:
      
      	* cp-lang.cc (objcp_tsubst_copy_and_build): Remove
      	function_p parameter.
      	* cp-objcp-common.h (objcp_tsubst_copy_and_build):
      	Likewise.
      	* cp-tree.h (tsubst_copy_and_build): Likewise.
      	* init.cc (get_nsdmi): Adjust calls to tsubst_copy_and_build.
      	* pt.cc (expand_integer_pack): Likewise.
      	(instantiate_non_dependent_expr_internal): Likewise.
      	(tsubst_function_decl): Likewise.
      	(tsubst_arg_types): Likewise.
      	(tsubst_exception_specification): Likewise.
      	(tsubst): Likewise.
      	(tsubst_copy_asm_operands): Likewise.
      	(tsubst_expr): Likewise.
      	(tsubst_non_call_postfix_expression): Likewise.
      	(tsubst_lambda_expr): Likewise.
      	(tsubst_copy_and_build_call_args): Likewise.
      	(tsubst_copy_and_build): Remove function_p parameter
      	and adjust function comment.  Adjust recursive calls.
      	<case CALL_EXPR>: Update outdated comment about when
      	we can see an IDENTIFIER_NODE callee with koenig_p=false.
      	(maybe_instantiate_noexcept): Adjust calls to
      	tsubst_copy_and_build.
      
      gcc/objcp/ChangeLog:
      
      	* objcp-lang.cc (objcp_tsubst_copy_and_build): Remove
      	function_p parameter.
      c52c3226
    • Jonathan Wakely's avatar
      libstdc++: Fix std::format test for strict -std=c++20 mode · c68c468e
      Jonathan Wakely authored
      Adjust a test to avoid using std::make_unsigned_t<__int128>. That's
      ill-formed in strict modes because std::is_integral_v<__int128> is
      false.
      
      libstdc++-v3/ChangeLog:
      
      	* testsuite/std/format/functions/format.cc: Do not use
      	std::make_unsigned_t<__int128>.
      c68c468e
    • Jonathan Wakely's avatar
      libstc++: std::formattable concept should not be defined for C++20 · a5d4f38f
      Jonathan Wakely authored
      This concept was added by a C++23 proposal, so don't define it for
      C++20.
      
      Split the format/formatter/formatter.cc test into two parts, one that
      tests the C++20 requirements and one that tests the C++23 concept.
      
      libstdc++-v3/ChangeLog:
      
      	* include/std/format (formattable): Only define for C++23/
      	* testsuite/std/format/formatter.cc: Moved to...
      	* testsuite/std/format/formatter/requirements.cc: ...here.
      	* testsuite/std/format/formatter/concept.cc: New test.
      	* testsuite/std/format/functions/format.cc: Replace use of
      	std::formattable in C++20.
      a5d4f38f
    • Jonathan Wakely's avatar
      libstdc++: Fix detection of std::format support for __float128 [PR107693] · ce86d967
      Jonathan Wakely authored
      std::format gives linker errors on targets that define __float128 but
      do not support using it with std::to_chars. This improves the handling
      of 128-bit flaoting-point types so they are disabled if unsupportable.
      
      libstdc++-v3/ChangeLog:
      
      	PR libstdc++/107693
      	* include/std/format (_GLIBCXX_FORMAT_F128): Define to 2 when
      	basic_format_arg needs to use its _M_f128 member.
      	(__extended_floating_point, __floating_point): Replace with ...
      	(__formattable_floating_point): New concept.
      	* testsuite/std/format/functions/format.cc: Check whether
      	__float128 is supported. Also test _Float128.
      ce86d967
    • Martin Liska's avatar
      libsanitizer: use git clone --depth 1 · 3895318b
      Martin Liska authored
      Using depth == 1 it makes the cloning much faster.
      
      libsanitizer/ChangeLog:
      
      	* merge.sh: Use git clone --depth 1.
      3895318b
    • Martin Liska's avatar
      Revert "docs: Fix expected diagnostics URL [PR107599]" · fe26b040
      Martin Liska authored
      This reverts commit f94c2eff.
      fe26b040
    • Jonathan Wakely's avatar
      libstdc++: Document use of Markdown for Doxygen comments · d34dea05
      Jonathan Wakely authored
      libstdc++-v3/ChangeLog:
      
      	* doc/xml/manual/documentation_hacking.xml: Document use of
      	Markdown for Doxygen comments. Tweak formatting.
      	* doc/html/manual/documentation_hacking.html: Regenerate.
      d34dea05
Loading