aboutsummaryrefslogtreecommitdiff
path: root/libcc1
AgeCommit message (Collapse)AuthorFilesLines
2023-01-16Update copyright years.Jakub Jelinek26-26/+26
2022-11-02Daily bump.GCC Administrator1-0/+9
2022-11-01c++: per-scope, per-signature lambda discriminatorsNathan Sidwell1-0/+1
This implements ABI-compliant lambda discriminators. Not only do we have per-scope counters, but we also distinguish by lambda signature. Only lambdas with the same signature will need non-zero discriminators. As the discriminator is signature-dependent, we have to process the lambda function's declaration before we can determine it. For templated and generic lambdas the signature is that of the uninstantiated lambda -- not separate for each instantiation. With this change, gcc and clang now produce the same lambda manglings for all these testcases. gcc/cp/ * cp-tree.h (LAMBDA_EXPR_SCOPE_SIG_DISCRIMINATOR): New. (struct tree_lambda_expr): Add discriminator_sig bitfield. (recrd_lambda_scope_sig_discriminator): Declare. * lambda.cc (struct lambda_sig_count): New. (lambda_discriminator): Add signature vector. (start_lambda_scope): Adjust. (compare_lambda_template_head, compare_lambda_sig): New. (record_lambda_scope_sig_discriminator): New. * mangle.cc (write_closure_type): Use the scope-sig discriminator for ABI >= 18. Emit abi mangling warning if needed. * module.cc (trees_out::core_vals): Stream the new discriminator. (trees_in::core_vals): Likewise. * parser.cc (cp_parser_lambda_declarator_opt): Call record_lambda_scope_sig_discriminator. * pt.cc (tsubst_lambda_expr): Likewise. libcc1/ * libcp1plugin.cc (plugin_start_lambda_closure_class_type): Initialize the per-scope, per-signature discriminator. gcc/testsuite/ * g++.dg/abi/lambda-sig1-18.C: New. * g++.dg/abi/lambda-sig1-18vs17.C: New. * g++.dg/cpp1y/lambda-mangle-1-18.C: New.
2022-11-01c++: Reorganize per-scope lambda discriminatorsNathan Sidwell1-1/+1
We currently use a per-extra-scope counter to discriminate multiple lambdas in a particular such scope. This is not ABI compliant. This patch merely refactors the existing code to make it easier to drop in a conformant mangling -- there's no functional change here. I rename the LAMBDA_EXPR_DISCIMINATOR to LAMBDA_EXPR_SCOPE_ONLY_DISCRIMINATOR, foreshadowing that there'll be a new discriminator. To provide ABI warnings we'll need to calculate both, and that requires some repacking of the lambda_expr's fields. Finally, although we end up calling the discriminator setter and the scope recorder (nearly) always consecutively, it's clearer to handle it as two separate operations. That also allows us to remove the instantiation special-case for a null extra-scope. gcc/cp/ * cp-tree.h (LAMBDA_EXPR_DISCRIMINATOR): Rename to ... (LAMBDA_EXPR_SCOPE_ONLY_DISCRIMINATOR): ... here. (struct tree_lambda_expr): Make default_capture_mode & discriminator_scope bitfields. (record_null_lambda_scope) Delete. (record_lambda_scope_discriminator): Declare. * lambda.cc (struct lambda_discriminator): New struct. (lambda_scope, lambda_scope_stack): Adjust types. (lambda_count): Delete. (struct tree_int): Delete. (start_lambda_scope, finish_lambda_scope): Adjust. (record_lambda_scope): Only record the scope. (record_lambda_scope_discriminator): New. * mangle.cc (write_closure_type_name): Adjust. * module.cc (trees_out::core_vals): Likewise, (trees_in::core_vals): Likewise. * parser.cc (cp_parser_lambda_expression): Call record_lambda_scope_discriminator. * pt.cc (tsubst_lambda_expr): Adjust record_lambda_scope caling. Call record_lambda_scope_discriminator. Commonize control flow on tsubsting the operator function. libcc1/ * libcp1plugin.cc (plugin_start_closure): Adjust. gcc/testsuite/ * g++.dg/abi/lambda-sig1-17.C: New. * g++.dg/abi/lambda-sig1.h: New. * g++.dg/cpp1y/lambda-mangle-1.C: Extracted to ... * g++.dg/cpp1y/lambda-mangle-1.h: ... here. * g++.dg/cpp1y/lambda-mangle-1-11.C: New * g++.dg/cpp1y/lambda-mangle-1-17.C
2022-10-13Daily bump.GCC Administrator1-0/+4
2022-10-12regenerate configure filesMartin Liska1-2/+2
Needed after a recent change. gcc/ChangeLog: * configure: Regenerate. libatomic/ChangeLog: * configure: Regenerate. libbacktrace/ChangeLog: * configure: Regenerate. libcc1/ChangeLog: * configure: Regenerate. libffi/ChangeLog: * configure: Regenerate. libgfortran/ChangeLog: * configure: Regenerate. libgomp/ChangeLog: * configure: Regenerate. libitm/ChangeLog: * configure: Regenerate. libobjc/ChangeLog: * configure: Regenerate. liboffloadmic/ChangeLog: * configure: Regenerate. * plugin/configure: Regenerate. libphobos/ChangeLog: * configure: Regenerate. libquadmath/ChangeLog: * configure: Regenerate. libsanitizer/ChangeLog: * configure: Regenerate. libssp/ChangeLog: * configure: Regenerate. libstdc++-v3/ChangeLog: * configure: Regenerate. libvtv/ChangeLog: * configure: Regenerate. lto-plugin/ChangeLog: * configure: Regenerate. zlib/ChangeLog: * configure: Regenerate.
2022-10-12Daily bump.GCC Administrator1-0/+5
2022-10-11Generic configury support for shared libs on VxWorksOlivier Hainque1-2/+46
This change adds the configury bits to activate the build of shared libs on VxWorks ports configured with --enable-shared, for libraries variants where this is generally supported (rtp, code model !large - currently not compatible with -fPIC). Set lt_cv_deplibs_check_method in libtool.m4, so the build of libraries know how to establish dependencies. This is useful in configurations such as aarch64 where proper support of LSE relies on accurate dependency information between libstdc++ and libgcc_s to begin with. Regenerate configure scripts to reflect libtool.m4 change. 2022-10-09 Olivier Hainque <hainque@adacore.com> * libtool.m4 (*vxworks*): When enable_shared, set dynamic_linker and friends for rtp !large. Assume the linker has the required abilities and set lt_cv_deplibs_check_method. gcc/ * config.gcc (*vxworks*): Add t-slibgcc fragment if enable_shared. libgcc/ * config.host (*vxworks*): When enable_shared, add libgcc and crtstuff "shared" fragments for rtp except large code model. (aarch64*-wrs-vxworks7*): Remove t-slibgcc-libgcc from the list of fragments. 2022-10-09 Olivier Hainque <hainque@adacore.com> gcc/ * configure: Regenerate. libatomic/ * configure: Regenerate. libbacktrace/ * configure: Regenerate. libcc1/ * configure: Regenerate. libffi/ * configure: Regenerate. libgfortran/ * configure: Regenerate. libgomp/ * configure: Regenerate. libitm/ * configure: Regenerate. libobjc/ * configure: Regenerate. liboffloadmic/ * configure: Regenerate. liboffloadmic/ * plugin/configure: Regenerate. libphobos/ * configure: Regenerate. libquadmath/ * configure: Regenerate. libsanitizer/ * configure: Regenerate. libssp/ * configure: Regenerate. libstdc++-v3/ * configure: Regenerate. libvtv/ * configure: Regenerate. lto-plugin/ * configure: Regenerate. zlib/ * configure: Regenerate.
2022-06-28Daily bump.GCC Administrator1-0/+6
2022-06-27c++: avoid <memory> poisoning on musl [PR106102]Sergei Trofimovich2-0/+2
On musl <pthread.h> uses calloc() (via <sched.h>). <memory> includes it indirectly and exposes use of poisoned calloc() when module code is built: /build/build/./prev-gcc/xg++ ... ../../gcc-13-20220626/gcc/cp/mapper-resolver.cc In file included from /<<NIX>>/musl-1.2.3-dev/include/pthread.h:30, from /build/build/prev-x86_64-unknown-linux-musl/libstdc++-v3/include/x86_64-unknown-linux-musl/bits/gthr-default.h:35, .... from /build/build/prev-x86_64-unknown-linux-musl/libstdc++-v3/include/memory:77, from ../../gcc-13-20220626/gcc/../libcody/cody.hh:24, from ../../gcc-13-20220626/gcc/cp/../../c++tools/resolver.h:25, from ../../gcc-13-20220626/gcc/cp/../../c++tools/resolver.cc:23, from ../../gcc-13-20220626/gcc/cp/mapper-resolver.cc:32: /<<NIX>>/musl-1.2.3-dev/include/sched.h:84:7: error: attempt to use poisoned "calloc" 84 | void *calloc(size_t, size_t); | ^ /<<NIX>>/musl-1.2.3-dev/include/sched.h:124:36: error: attempt to use poisoned "calloc" 124 | #define CPU_ALLOC(n) ((cpu_set_t *)calloc(1,CPU_ALLOC_SIZE(n))) | ^ gcc/cp/ PR c++/106102 * mapper-client.cc: Include <memory> via "system.h". * mapper-resolver.cc: Ditto. * module.cc: Ditto. libcc1/ PR c++/106102 * libcc1plugin.cc: Include <memory> via "system.h". * libcp1plugin.cc: Ditto.
2022-06-02Daily bump.GCC Administrator1-0/+5
2022-06-01[PATCH] configure: use OBJDUMP determined by libtool [PR95648]David Seifert1-1/+1
$ac_cv_prog_OBJDUMP contains the --host OBJDUMP that libtool has inferred. Current config/gcc-plugin.m4 does not respect the user's choice for OBJDUMP. PR plugins/95648 config/ * gcc-plugin.m4: Use libtool's $ac_cv_prog_OBJDUMP. gcc/ * configure: Regenerate. libcc1/ * configure: Regenerate.
2022-01-03Update copyright years.Jakub Jelinek26-26/+26
2021-12-17Daily bump.GCC Administrator1-0/+9
2021-12-16c++: two-stage name lookup for overloaded operators [PR51577]Patrick Palka1-2/+2
In order to properly implement two-stage name lookup for dependent operator expressions, we need to remember the result of unqualified lookup of the operator at template definition time, and reuse that result rather than performing another unqualified lookup at instantiation time. Ideally we could just store the lookup in the expression directly, but as pointed out in r9-6405 this isn't really possible since we use the standard tree codes to represent most dependent operator expressions. We could perhaps create a new tree code to represent dependent operator expressions, with enough operands to store the lookup along with everything else, but that'd require a lot of careful work to make sure we handle this new tree code properly across the frontend. But currently type-dependent operator (and call) expressions are given an empty TREE_TYPE, which dependent_type_p treats as dependent, so this field is effectively unused except to signal that the expression is type-dependent. It'd be convenient if we could store the lookup there while preserving the dependent-ness of the expression. To that end, this patch creates a new kind of type, called DEPENDENT_OPERATOR_TYPE, which we give to dependent operator expressions and into which we can store the result of operator lookup at template definition time (DEPENDENT_OPERATOR_TYPE_SAVED_LOOKUPS). Since this type is always dependent (by definition), and since the frontend doesn't seem to care much about the exact type of a type-dependent expression, using this type in place of a NULL_TREE type seems to "just work"; only dependent_type_p and WILDCARD_TYPE_P need to be adjusted to return true for this new type. The rest of the patch mostly consists of adding the necessary plumbing to pass DEPENDENT_OPERATOR_TYPE_SAVED_LOOKUPS to add_operator_candidates, adjusting all callers of build_x_* appropriately, and removing the now unnecessary push_operator_bindings mechanism. In passing, this patch simplifies finish_constraint_binary_op to avoid using build_x_binary_op for building a binary constraint-expr; we don't need to consider operator overloads here, as the &&/|| inside a constraint effectively always has the built-in meaning (since atomic constraints must have bool type). This patch also makes FOLD_EXPR_OP yield a tree_code instead of a raw INTEGER_CST. Finally, this patch adds the XFAILed test operator-8.C which is about broken two-stage name lookup for rewritten non-dependent operator expressions, an existing bug that's otherwise only documented in build_new_op. PR c++/51577 PR c++/83035 PR c++/100465 gcc/cp/ChangeLog: * call.c (add_operator_candidates): Add lookups parameter. Use it to avoid performing a second unqualified lookup when instantiating a dependent operator expression. (build_new_op): Add lookups parameter and pass it appropriately. * constraint.cc (finish_constraint_binary_op): Use build_min_nt_loc instead of build_x_binary_op. * coroutines.cc (build_co_await): Adjust call to build_new_op. * cp-objcp-common.c (cp_common_init_ts): Mark DEPENDENT_OPERATOR_TYPE appropriately. * cp-tree.def (DEPENDENT_OPERATOR_TYPE): Define. * cp-tree.h (WILDCARD_TYPE_P): Accept DEPENDENT_OPERATOR_TYPE. (FOLD_EXPR_OP_RAW): New, renamed from ... (FOLD_EXPR_OP): ... this. Change this to return the tree_code directly. (DEPENDENT_OPERATOR_TYPE_SAVED_LOOKUPS): Define. (templated_operator_saved_lookups): Define. (build_new_op): Add lookups parameter. (build_dependent_operator_type): Declare. (build_x_indirect_ref): Add lookups parameter. (build_x_binary_op): Likewise. (build_x_unary_op): Likewise. (build_x_compound_expr): Likewise. (build_x_modify_expr): Likewise. * cxx-pretty-print.c (get_fold_operator): Adjust after FOLD_EXPR_OP change. * decl.c (start_preparsed_function): Don't call push_operator_bindings. * decl2.c (grok_array_decl): Adjust calls to build_new_op. * method.c (do_one_comp): Likewise. (build_comparison_op): Likewise. * module.cc (trees_out::type_node): Handle DEPENDENT_OPERATOR_TYPE. (trees_in::tree_node): Likewise. * name-lookup.c (lookup_name): Revert r11-2876 change. (op_unqualified_lookup): Remove. (maybe_save_operator_binding): Remove. (discard_operator_bindings): Remove. (push_operator_bindings): Remove. * name-lookup.h (maybe_save_operator_binding): Remove. (push_operator_bindings): Remove. (discard_operator_bindings): Remove. * parser.c (cp_parser_unary_expression): Adjust calls to build_x_*. (cp_parser_binary_expression): Likewise. (cp_parser_assignment_expression): Likewise. (cp_parser_expression): Likewise. (do_range_for_auto_deduction): Likewise. (cp_convert_range_for): Likewise. (cp_parser_perform_range_for_lookup): Likewise. (cp_parser_template_argument): Likewise. (cp_parser_omp_for_cond): Likewise. (cp_parser_omp_for_incr): Likewise. (cp_parser_omp_for_loop_init): Likewise. (cp_convert_omp_range_for): Likewise. (cp_finish_omp_range_for): Likewise. * pt.c (fold_expression): Adjust after FOLD_EXPR_OP change. Pass templated_operator_saved_lookups to build_x_*. (tsubst_omp_for_iterator): Adjust call to build_x_modify_expr. (tsubst_expr) <case COMPOUND_EXPR>: Pass templated_operator_saved_lookups to build_x_*. (tsubst_copy_and_build) <case INDIRECT_REF>: Likewise. <case tcc_unary>: Likewise. <case tcc_binary>: Likewise. <case MODOP_EXPR>: Likewise. <case COMPOUND_EXPR>: Likewise. (dependent_type_p_r): Return true for DEPENDENT_OPERATOR_TYPE. * ptree.c (cxx_print_type): Handle DEPENDENT_OPERATOR_TYPE. * semantics.c (finish_increment_expr): Adjust call to build_x_unary_op. (finish_unary_op_expr): Likewise. (handle_omp_for_class_iterator): Adjust calls to build_x_*. (finish_omp_cancel): Likewise. (finish_unary_fold_expr): Use build_dependent_operator_type. (finish_binary_fold_expr): Likewise. * tree.c (cp_free_lang_data): Don't call discard_operator_bindings. * typeck.c (rationalize_conditional_expr): Adjust call to build_x_binary_op. (op_unqualified_lookup): Define. (build_dependent_operator_type): Define. (build_x_indirect_ref): Add lookups parameter and use build_dependent_operator_type. (build_x_binary_op): Likewise. (build_x_array_ref): Likewise. (build_x_unary_op): Likewise. (build_x_compound_expr_from_list): Adjust call to build_x_compound_expr. (build_x_compound_expr_from_vec): Likewise. (build_x_compound_expr): Add lookups parameter and use build_dependent_operator_type. (cp_build_modify_expr): Adjust call to build_new_op. (build_x_modify_expr): Add lookups parameter and use build_dependent_operator_type. * typeck2.c (build_x_arrow): Adjust call to build_new_op. libcc1/ChangeLog: * libcp1plugin.cc (plugin_build_unary_expr): Adjust call to build_x_unary_op. (plugin_build_binary_expr): Adjust call to build_x_binary_op. gcc/testsuite/ChangeLog: * g++.dg/lookup/operator-3.C: Split out operator overload declarations into ... * g++.dg/lookup/operator-3-ops.h: ... here. * g++.dg/lookup/operator-3a.C: New test. * g++.dg/lookup/operator-4.C: New test. * g++.dg/lookup/operator-4a.C: New test. * g++.dg/lookup/operator-5.C: New test. * g++.dg/lookup/operator-5a.C: New test. * g++.dg/lookup/operator-6.C: New test. * g++.dg/lookup/operator-7.C: New test. * g++.dg/lookup/operator-8.C: New test.
2021-12-16Daily bump.GCC Administrator1-0/+4
2021-12-15configure: Account CXXFLAGS in gcc-plugin.m4.Iain Sandoe1-0/+5
We now use a C++ compiler so that we need to process CXXFLAGS as well as CFLAGS in the gcc-plugin config fragment. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> config/ChangeLog: * gcc-plugin.m4: Save and process CXXFLAGS. gcc/ChangeLog: * configure: Regenerate. libcc1/ChangeLog: * configure: Regenerate.
2021-08-18Daily bump.GCC Administrator1-0/+5
2021-08-17Darwin, libcc1: Handle hosts with mdynamic-no-pic support.Iain Sandoe2-0/+2
The default for building host-side binaries for mdynamic-no-pic hosts is to enable this. However, it is not compatible with dynamic libraries, so must be switched off for libcc1. Signed-off-by: Iain Sandoe <iain@sandoe.co.uk> libcc1/ChangeLog: * Makefile.am: Switch mdynamic-no-pic to fPIC. * Makefile.in: Regenerated.
2021-06-29Daily bump.GCC Administrator1-0/+5
2021-06-28libcc1: Add support for per-location warning groups.Martin Sebor1-1/+1
libcc1/ChangeLog: * libcp1plugin.cc (record_decl_address): Replace a direct use of TREE_NO_WARNING with suppress_warning.
2021-05-06Daily bump.GCC Administrator1-0/+198
2021-05-05libcc1: avoid a call to c_strTom Tromey1-2/+2
This is a trivial change to libcc1 to avoid an explicit call to c_str. Passing by const reference is slightly less wordy. libcc1 * compiler.cc (make_regexp): Take const std::string. (cc1_plugin::compiler_triplet_regexp::find): Update.
2021-05-05libcc1: avoid extra string copiesTom Tromey1-2/+2
PR c/94669 points out that a couple of spots in libcc1 take a std::string where a reference would do. This changes these spots to take a const char *, to reduce the number of copies. libcc1 PR c/94669 * compiler.hh (compiler_driver_filename): Take const char *. (compiler_triplet_regexp): Likewise.
2021-05-05libcc1: use variadic templates for callbacksTom Tromey6-202/+88
This patch completes the transition of libcc1 from the use of separate template functions for different arities to the use of variadic functions. This is how I had wanted it to work from the very beginning, and is possible now with C++11. I had thought that variadic callbacks required C++17, but it turns out that the approach taken here is basically equivalent to std::apply -- just a bit wordier. libcc1 * rpc.hh (argument_wrapper) <get>: Replace cast operator. (argument_wrapper<T *>) <get>: Likewise. (unmarshall): Add std::tuple overloads. (callback): Remove. (class invoker): New. * libcp1plugin.cc (plugin_init): Update. * libcp1.cc (libcp1::add_callbacks): Update. * libcc1plugin.cc (plugin_init): Update. * libcc1.cc (libcc1::add_callbacks): Update. * connection.cc (cc1_plugin::connection::do_wait): Update.
2021-05-05libcc1: fix a memory leakTom Tromey1-6/+2
libcc1 has a memory leak when calling fork_exec -- it allocates a new vector of arguments, but then does not free it anywhere. This patch changes this code to use std::vector instead. Note that the previous code tried to avoid bad_alloc. I don't believe this is very important. For one thing, plenty of other allocations do not bother with this. libcc1 * gdbctx.hh (do_compile): Use std::vector.
2021-05-05libcc1: share the GCC interface codeTom Tromey3-464/+277
Both the C and C++ side of the GDB plugin in libcc1 share a lot of code relating to the base GCC interface. It was all copy-and-pasted, but is essentially identical between the two. This is by design, as the base GCC API is intended to be shared. This patch merges the implementations into base_gdb_plugin, which was introduced earlier for this purpose. libcc1 * libcp1.cc (libcp1): Change parameters. Update. (libcp1_set_verbose, libcp1_set_arguments) (libcp1_set_triplet_regexp, libcp1_set_driver_filename) (libcp1_set_source_file, libcp1_set_print_callback, fork_exec) (libcp1_compile, libcp1_destroy, vtable): Remove. (libcp1::add_callbacks): New method, extracted from libcp1_compile. (gcc_c_fe_context): Update. * libcc1.cc (libcc1): Change parameters. Update. (libcc1_set_verbose, libcc1_set_arguments) (libcc1_set_triplet_regexp, libcc1_set_driver_filename) (libcc1_set_source_file, libcc1_set_print_callback, fork_exec) (libcc1_compile, libcc1_destroy, vtable): Remove. (libcc1::add_callbacks): New method, extracted from libcc1_compile. (gcc_c_fe_context): Update. * gdbctx.hh (base_gdb_plugin): Change parameters. (~base_gdb_plugin): New. <add_callbacks>: New virtual method. <plugin_name, fe_version, compiler_name, vtable>: New members. (get_self, do_set_verbose, do_set_arguments) (do_set_triplet_regexp, do_set_driver_filename) (do_set_arguments_v0, do_set_source_file, do_set_print_callback) (fork_exec, do_compile, do_compile_v0, do_destroy): New methods.
2021-05-05libcc1: use GCC_FE_VERSION_1 in C++ pluginTom Tromey1-1/+1
The C++ plugin defaults to version 0 of the base compiler API. However, this is a mistake -- version 1 was introduced before the C++ API was even implemented. This switches the default to version 1. Note that the compiler-side plugin will accept this version, so it should remain compatible. libcc1 * libcp1.cc (vtable): Use GCC_FE_VERSION_1.
2021-05-05libcc1: share GDB plugin codeTom Tromey3-178/+145
The two GDB plugins in libcc1 share a fair amount of code. This was done by copy-and-paste, though in reality the underlying code is nearly identical. libcc1 * libcp1.cc (struct libcp1): Derive from base_gdb_plugin. Remove shared code. (class libcp1_connection): Remove. (rpc): Remove. (libcp1_set_verbose, libcp1_compile): Update. (cp_call_binding_oracle, cp_call_symbol_address) (cp_call_enter_scope, cp_call_leave_scope): Update. * libcc1.cc (struct libcc1): Derive from base_gdb_plugin. Remove shared code. (class libcc1_connection): Remove. (c_call_binding_oracle, c_call_symbol_address): Update. (rpc): Remove. (libcc1_set_verbose, libcc1_compile): Update. * gdbctx.hh: New file.
2021-05-05libcc1: share basic context codeTom Tromey6-420/+321
Both plugins in libcc1 share a fair amount of boilerplate. They both share error-emission code, context management code, and tree GC code. This patch unifies these two bodies of code, avoiding needless duplication. libcc1 * libcc1plugin.cc: Move code to context.cc. * libcp1plugin.cc: Move code to context.cc. * context.hh: New file. * context.cc: New file. * Makefile.in: Rebuild. * Makefile.am (AM_CPPFLAGS): Add more gcc flags. (CPPFLAGS_FOR_C, CPPFLAGS_FOR_CXX): Update. (libcc1plugin_la_SOURCES): Add context.hh, context.cc. (libcp1plugin_la_SOURCES): Likewise.
2021-05-05libcc1: use static_assertTom Tromey1-2/+2
This changes one spot in libcc1 to use static_assert rather than the old-style array declaration. libcc1 * libcp1plugin.cc: Use static assert.
2021-05-05libcc1: use foreachTom Tromey2-16/+10
This changes libcc1 to ues foreach in a couple of spots. libcc1 * libcp1plugin.cc (plugin_context::mark): Use foreach. * libcc1plugin.cc (plugin_context::mark): Use foreach.
2021-05-05libcc1: unify compiler handlingTom Tromey6-298/+230
Both libcc1 plugins have nearly identical copies of code to find the underlying compiler. This seemed wasteful to me, so this patch unifies the copies. Two minor API changes were needed. First, the old code used a back-link from the compiler object to the plugin object to check the 'verbose' setting. This patch adds a 'verbose' setting directly to the compiler object instead. Second, the 'find' method implicitly knew which compiler base name ("gcc" or "g++") to use. This patch makes this a parameter that is passed in by the plugin. libcc1 * libcp1.cc (compiler, compiler_triplet_regexp) (compiler_driver_filename): Remove. (libcp1::libcp1): Update. (make_regexp, libcp1::compiler::find) (libcp1::compiler_triplet_regexp::find) (libcp1::compiler_driver_filename::find): Remove. (libcp1_set_verbose, libcp1_set_arguments) (libcp1_set_triplet_regexp, libcp1_set_driver_filename): Update. * libcc1.cc (compiler, compiler_triplet_regexp) (compiler_driver_filename): Remove. (libcc1::libcc1): Update. (make_regexp, libcc1::compiler::find) (libcc1::compiler_triplet_regexp::find) (libcc1::compiler_driver_filename::find): Remove. (libcc1_set_verbose, libcc1_set_arguments) (libcc1_set_triplet_regexp, libcc1_set_driver_filename): Update. * compiler.cc: New file. * compiler.hh: New file. * Makefile.in: Rebuild. * Makefile.am (libcc1_la_SOURCES): Add compiler.hh, compiler.cc.
2021-05-05libcc1: use unique_ptr moreTom Tromey2-38/+26
This changes libcc1 to use unique_ptr in a few more places, removing some manual memory management. libcc1 * libcp1.cc (struct libcp1) <connection, compilerp>: Use unique_ptr. (~libcp1): Remove. (libcp1_compile, libcp1_set_triplet_regexp) (libcp1_set_driver_filename): Update. * libcc1.cc (struct libcc1) <connection, compilerp>: Use unique_ptr. (~libcc1): Remove. (libcc1_set_triplet_regexp, libcc1_set_driver_filename) (libcc1_compile): Update.
2021-05-05libcc1: add more uses of 'deleter'Tom Tromey4-100/+105
This changes libcc1 to use the 'deleter' template in a few more places. The template and basic specializations are moved to a new header, then some unmarshall functions are changed to use this code. This change avoids the need to repeat cleanup code in the unmarshallers. libcc1 * rpc.hh (deleter): Move template and some specializations to deleter.hh. (argument_wrapper<const T *>): Use cc1_plugin::unique_ptr. * marshall.cc (cc1_plugin::unmarshall): Use cc1_plugin::unique_ptr. * marshall-cp.hh (deleter): New specializations. (unmarshall): Use cc1_plugin::unique_ptr. * deleter.hh: New file.
2021-05-05libcc1: add deleter objectsTom Tromey1-131/+45
This adds deleter objects for various kinds of protocol pointers to libcc1. Existing specializations of argument_wrapper are then replaced with a single specialization that handles all pointer types via the appropriate deleter. The result here is a bit nicer because the argument_wrapper boilerplate code is completely shared, leaving just the memory-management detail to the particular specializations. libcc1 * rpc.hh (struct deleter): New template class and specializations. (argument_wrapper): Remove specializations. Add specialization for any pointer type.
2021-05-05libcc1: use std::vector when building function typesTom Tromey2-12/+10
This changes libcc1 to use std::vector in the code that builds function types. This avoids some explicit memory management. libcc1 * libcp1plugin.cc (plugin_build_function_type): Use std::vector. * libcc1plugin.cc (plugin_build_function_type): Use std::vector.
2021-05-05libcc1: use variadic templates for "rpc"Tom Tromey2-154/+8
This changes libcc1 to use variadic templates for the "rpc" functions. This simplifies the code and removes some possibility for mistakes. libcc1 * libcp1.cc (rpc): Use variadic template. Remove overloads. * libcc1.cc (rpc): Use variadic template. Remove overloads.
2021-05-05libcc1: use variadic templates for "call"Tom Tromey2-159/+25
This changes libcc1 to use variadic templates for the "call" functions. The primary benefit is that this simplifies the code. libcc1 * rpc.hh (call): Use variadic template. Remove overloads. * marshall.hh (marshall): Add base overload. Use variadic template.
2021-05-05libcc1: delete copy constructor and assignment operatorsTom Tromey3-32/+24
Change libcc1 to use "= delete" for the copy constructor and assignment operator, rather than the old approach of private methods that are nowhere defined. libcc1 * rpc.hh (argument_wrapper): Use delete for copy constructor. * connection.hh (class connection): Use delete for copy constructor. * callbacks.hh (class callbacks): Use delete for copy constructor.
2021-05-05libcc1: inline some simple methodsTom Tromey2-11/+4
This changes libcc1 to inline a trivial method and to use the default constructor. libcc1 * connection.hh (~connection): Use default. (print): Inline. * connection.cc (cc1_plugin::connection::~connection) (cc1_plugin::connection::print): Remove definitions.
2021-05-05libcc1: use "override"Tom Tromey2-6/+6
This changes libcc1 to use "override" where appropriate. libcc1 * libcp1.cc (class compiler_triplet_regexp) (class compiler_driver_filename, class libcp1_connection): Use "override". * libcc1.cc (class compiler_triplet_regexp) (class compiler_driver_filename, class libcc1_connection): Use "override".
2021-05-05libcc1: use templates to unmarshall enumsTom Tromey5-106/+25
Now that C++11 can be used in GCC, libcc1 can be changed to use templates and type traits to handle unmarshalling all kinds of enums. libcc1 * marshall.hh (cc1_plugin::unmarshall): Use type traits. * marshall-cp.hh (cc1_plugin::unmarshall): Remove overloads. * marshall-c.hh: Remove. * libcc1plugin.cc: Update includes. * libcc1.cc: Update includes.
2021-05-04Daily bump.GCC Administrator1-0/+5
2021-05-03GCC_CET_HOST_FLAGS: Check if host supports multi-byte NOPsH.J. Lu1-13/+32
Check if host supports multi-byte NOPs before enabling CET on host. gcc/ PR bootstrap/99703 * configure: Regenerated. libbacktrace/ PR bootstrap/99703 * configure: Regenerated. libcc1/ PR bootstrap/99703 * configure: Regenerated. libcpp/ PR bootstrap/99703 * configure: Regenerated. libdecnumber/ PR bootstrap/99703 * configure: Regenerated. lto-plugin/ PR bootstrap/99703 * configure: Regenerated.
2021-01-06Daily bump.GCC Administrator1-0/+4
2021-01-05Update GNU/Hurd configure supportSamuel Thibault1-11/+1
ChangeLog: * libtool.m4: Match gnu* along other GNU systems. * libgo/config/libtool.m4: Match gnu* along other GNU systems. * libgo/configure: Re-generate. libffi/ * configure: Re-generate. libgomp/ * configure: Re-generate. gcc/ * configure: Re-generate. libatomic/ * configure: Re-generate. libbacktrace/ * configure: Re-generate. libcc1/ * configure: Re-generate. libgfortran/ * configure: Re-generate. libgomp/ * configure: Re-generate. libhsail-rt/ * configure: Re-generate. libitm/ * configure: Re-generate. libobjc/ * configure: Re-generate. liboffloadmic/ * configure: Re-generate. * plugin/configure: Re-generate. libphobos/ * configure: Re-generate. libquadmath/ * configure: Re-generate. libsanitizer/ * configure: Re-generate. libssp/ * configure: Re-generate. libstdc++-v3/ * configure: Re-generate. libvtv/ * configure: Re-generate. lto-plugin/ * configure: Re-generate. zlib/ * configure: Re-generate.
2021-01-04Update copyright years.Jakub Jelinek21-21/+21
2020-12-19Daily bump.GCC Administrator1-0/+7
2020-12-18libcc1: Fix up libcc1 configure [PR98330]Jakub Jelinek2-2/+2
Either we should write test x$darwin_dynamic_lookup = xyes or we should make sure the variable is always defined to non-empty string. 2020-12-18 Jakub Jelinek <jakub@redhat.com> PR bootstrap/98380 * configure.ac: Set darwin_dynamic_lookup=no instead to empty string. * configure: Regenerated.