On Sep 23, 2016, Alexandre Oliva <aol...@redhat.com> wrote: > This patchset adds support for the C++ language to libcc1. > It updates a few patches for libcc1 by Jan Kratochvil, posted long ago > but IIRC not reviewed; it updates a patch that adds support for > representing aliases and trampolines in dwarf2+ debug info (useful for > naming all cdtors clones), adding support for combined dwarf2 and vms > debug output compared with the earlier version; and finally the actual > extension of libcc1 to support the C++ language, with a few changes to > the C++ front-end to make some functionality available to libcc1, to > introduce symbol lookups through libcc1, to enable code snippets to be > regarded as friends of every class, and other minor adjustments.
> Regstrapped on x86_64-linux-gnu and i686-linux-gnu; libcc1 was tested > with GDB branch users/pmuldoon/c++compile, where GDB support for C++ > compile code is being developed. > Ok to install? Ping? https://gcc.gnu.org/ml/gcc-patches/2016-09/msg01744.html > https://gcc.gnu.org/ml/gcc-patches/2015-05/msg02218.html > include/ChangeLog > 2015-05-24 Jan Kratochvil <jan.kratoch...@redhat.com> > * gcc-interface.h (enum gcc_base_api_version): Add GCC_FE_VERSION_1. > libcc1/ChangeLog > 2015-05-24 Jan Kratochvil <jan.kratoch...@redhat.com> > * libcc1.cc (vtable): Update to GCC_FE_VERSION_1. > (gcc_c_fe_context): Accept also GCC_FE_VERSION_1. > https://gcc.gnu.org/ml/gcc-patches/2015-05/msg02219.html > include/ChangeLog > 2015-05-24 Jan Kratochvil <jan.kratoch...@redhat.com> > * gcc-interface.h (enum gcc_base_api_version): Add comment to > GCC_FE_VERSION_1. > (struct gcc_base_vtable): Rename compile to compile_v0. Update comment > for compile. New methods set_verbose and compile. > libcc1/ChangeLog > 2015-05-24 Jan Kratochvil <jan.kratoch...@redhat.com> > * libcc1.cc: Include intl.h. > (struct libcc1): Add field verbose. > (libcc1::libcc1): Initialize it. > (libcc1_set_verbose): New function. > (libcc1_set_arguments): Print messages for VERBOSE. > (libcc1_compile): Remove parameter verbose. Use VERBOSE from SELF. > (libcc1_compile_v0): New function. > (vtable): Use libcc1_compile_v0 and add libcc1_compile and > libcc1_set_verbose. > https://gcc.gnu.org/ml/gcc-patches/2015-05/msg02220.html > include/ChangeLog > 2015-05-24 Jan Kratochvil <jan.kratoch...@redhat.com> > * gcc-interface.h (enum gcc_base_api_version): Update comment for > GCC_FE_VERSION_1. > (struct gcc_base_vtable): Rename set_arguments to set_arguments_v0. > Add set_arguments, set_triplet_regexp and set_driver_filename. > libcc1/ChangeLog > 2015-05-24 Jan Kratochvil <jan.kratoch...@redhat.com> > * libcc1.cc (libcc1): Add class compiler with field compilerp, class > compiler_triplet_regexp and class compiler_driver_filename. > (libcc1::libcc1): Initialize compilerp. > (libcc1::~libcc1): Delete compilerp. > (libcc1::compiler::find, libcc1::compiler_triplet_regexp::find) > (libcc1::compiler_driver_filename::find): New methods. > (libcc1_set_arguments): Remove parameter triplet_regexp. > (libcc1_set_triplet_regexp, libcc1_set_driver_filename) > (libcc1_set_arguments_v0): New functions. > (vtable): Use libcc1_set_arguments_v0, add libcc1_set_arguments, > libcc1_set_triplet_regexp and libcc1_set_driver_filename. > https://gcc.gnu.org/ml/gcc-patches/2015-05/msg02221.html > libcc1/ChangeLog > 2015-05-24 Jan Kratochvil <jan.kratoch...@redhat.com> > * findcomp.cc: Include system.h. > (search_dir): Return absolute filename. > Ping? https://gcc.gnu.org/ml/gcc-patches/2016-02/msg01407.html > support aliases and trampolines in dwarf2 > for gcc/ChangeLog > * debug.h (struct gcc_debug_hooks): Add aliased_decl and > trampoline_decl. > * dwarf2out.c (dwarf2out_aliased_decl): New. > (dwarf2out_trampoline_decl): New. > (dwarf2_debug_hooks): Add them. > (dwarf2_name): Skip leading '*' returned by langhook. > (dwarf2_lineno_debug_hooks): Add dummies. > * debug.c (do_nothing_debug_hooks): Likewise. > * dbxout.c (dbx_debug_hooks, xcoff_debug_hooks): Likewise. > * sdbout.c (sdb_debug_hooks): Likewise. > * vmsdbgout.c (vmsdbgout_aliased_decl): New. > (vmsdbgout_trampoline_decl): New. > (vmsdbg_debug_hooks): Add them. > * cgraph.h (cgraph_node::is_lang_trampoline): Declare. > * cgraphunit.c: Include demangle.h. > (cgraph_node::expand_thunk): Call function_decl debug_hook > after assembly expansion. Do not mark thunk as ignored in > gimple expansion. > (cxx_cdtor_trampoline_p): New. > (cgraph_node::is_lang_trampoline): New. > (cgraph_node::assemble_thunks_and_aliases): Call the new > debug_hooks. > (symbol_table::output_weakrefs): Likewise. > * varpool.c (varpool_node::assemble_aliases): Likewise. > for gcc/cp/ChangeLog > * method.c (make_alias_for): Copy DECL_IGNORED_P. > for gcc/testsuite/ChangeLog > * g++.dg/debug/dwarf2/cdtor-1.C: Adjust linkage_name count. > * g++.dg/debug/dwarf2/cdtor-2.C: New. > * g++.dg/debug/dwarf2/cdtor-3.C: New. > * g++.dg/debug/dwarf2/covariant-1.C: New. > * gcc.dg/debug/dwarf2/attr-alias-1.c: New. > * gcc.dg/debug/dwarf2/attr-alias-2.c: New. > * gcc.dg/debug/dwarf2/attr-weakref-1.c: New. > * gcc.dg/debug/dwarf2/attr-weakref-2.c: New. > Introduce C++ support in libcc1 > Extend libcc1's with an API for C++ support. > Extend libcc1's C API to distinguish between integral types with the > same width, as in C++. Likewise for float types. > Export small bits of functionality from the C++ front-end for use in > libcc1. Add support for the C++ front-end to look up names and > addresses using a libcc1-registered binding oracle. Add support for > global friends. > for gcc/cp/ChangeLog > Introduce C++ support in libcc1. > * cp-tree.h (struct lang_identifier): Add oracle_looked_up. > (ansi_litopname): Declare. > (add_to_global_friend_list): Declare. > (remove_from_global_friend_list): Declare. > (is_global_friend): Declare. > (enum cp_oracle_request): New type. > (cp_binding_oracle_function): New type. > (cp_binding_oracle): Declare. > (cp_finish_injected_record_type): Declare. > * friend.c (global_friend_list): New var. > (add_to_global_friend_list): New fn. > (find_in_global_friend_list): New fn. > (remove_from_global_friend_list): New fn. > (is_global_friend): New fn. > (is_friend): Call is_global_friend. > * name-lookup.c (cp_binding_oracle): New var. > (query_oracle): New fn. > (qualified_lookup_using_namespace): Call query_oracle. > (lookup_name_real_1): Likewise. > * parser.c (ansi_litopname): New fn. > * search.c (friend_accessible_p): Call is_global_friend. > * semantics.c (is_this_parameter): Accept a variable if the > binding oracle is enabled. > for include > Introduce C++ support in libcc1. > * gcc-c-fe.def (int_type_v0): Rename from... > (int_type): ... this. Introduce new version. > (float_type_v0): Rename from... > (float_type): ... this. Introduce new version. > (char_type): New. > * gcc-c-interface.h (gcc_c_api_version): Add GCC_C_FE_VERSION_1. > (gcc_type_array): Move... > * gcc-interface.h: ... here. > * gcc-cp-fe.def: New. > * gcc-cp-interface.h: New. > for libcc1 > Introduce C++ support. > * Makefile.am (AM_CPPFLAGS): Move some -I flags to... > (CPPFLAGS_FOR_C_FAMILY, CPPFLAGS_FOR_C, CPPFLAGS_FOR_CXX): ... > new macros. > (plugin_LTLIBRARIES): Add libcp1plugin.la. > (BUILT_SOURCES, MOSTLYCLEANFILES): Add... > (cp-compiler-name.h): ... this. New. > (c-compiler-name.h): Rename all over from... > (compiler-name.h): ... this. Create it atomically. > (marshall_c_source, marshall_cxx_source): New macros. > (libcc1plugin_la_SOURCES): Rename plugin.cc to libcc1plugin.cc. > Add marshall_c_source expansion. > (libcc1plugin.lo_CPPFLAGS): New macro. > (libcp1plugin_la_LDFLAGS): Likewise. > (libcp1plugin_la_SOURCES): Likewise. > (libcp1plugin.lo_CPPFLAGS): Likewise. > (libcp1plugin_la_LIBADD): Likewise. > (libcp1plugin_la_DEPENDENCIES): Likewise. > (libcp1plugin_la_LINK): Likewise. > (libcc1_la_SOURCES): Added marshall_c_source and > marshall_cxx_source expansions. > * Makefile.in: Rebuild. > * compiler-name.h: Rename all over to... > * c-compiler-name.h: ... this. Define C_COMPILER_NAME instead > of COMPILER_NAME. > * plugin.cc: Rename all over to... > * libcc1plugin.cc: ... this. Include marshall-c.hh. > (address_rewriter): Drop cleaning up of VLA sizes. > (plugin_build_decl): Mark decls as external. > (plugin_tagbind): Propagate name to all variants. > (build_anonymous_node): New. > (plugin_build_record_type): Use it instead of make_node. > (plugin_build_union_type): Likewise. > (plugin_build_enum_type): Likewise. > (plugin_finish_record_or_union): Update all type variants. > (safe_lookup_builtin_type): New. > (plugin_int_check): Factor out of, and add checks to, ... > (plugin_int_type): ... this. Rename to... > (plugin_int_type_v0): ... this. > (plugin_int_type): New interface, new implementation. > (plugin_char_type): New. > (plugin_float_type_v0): Rename from... > (plugin_float_type): ... this. New interface, new implementation. > (plugin_init): Bump handshake version. > * libcc1.cc: Include marshall-c.hh. Drop gcc-interface.h. > (call_binding_oracle): Rename to... > (c_call_binding_oracle): ... this, into anonymous namespace. > (call_symbol_address): Rename to... > (c_call_symbol_address): ... this, likewise. > (GCC_METHOD#): Move methods into cc1plugin::c:: namespace. > (libcc1::compiler::find): Refer to C_COMPILER_NAME. > (fork_exec): Bump to GCC_C_FE_VERSION_1. > (libcc1_compile): Prefix callbacks with c_. > (gcc_c_fe_context): Accept GCC_C_FE_VERSION_1. > * libcc1.sym: Export gcc_cp_fe_context. > * libcp1.cc: New, mostly copied and adjusted from libcc1.cc. > * libcp1plugin.cc: New, initially copied from libcc1plugin.cc. > * libcp1plugin.sym: New. > * marshall-c.hh: New. Move C-specific types from... > * marshall.cc: ... this. > (cc1_plugin::marshall_array_start): New. > (cc1_plugin::marshall_array_elmts): New. > (cc1_plugin::marshall for gcc_type_array): Use the above. > (cc1_plugin::unmarshall_array_start): New. > (cc1_plugin::unmarshall_array_elmts): New. > (cc1_plugin::unmarshall for gcc_type_array): Use the above. > * marshall.hh: Declare the new array building blocks. > Drop C-specific unmarshall declarations. > * marshall-cp.hh: New. > * names.cc (GCC_METHOD#): Add LANG:: to method names. > (LANG): Define while including gcc-c-fe.def and gcc-cp-fe.def. > * names.hh: Include gcc-c-fe.def and gcc-cp-fe.def in the > corresponding namespaces. > * rpc.hh: Don't include marshall.hh. > [GCC_CP_INTERFACE_H] (argument_wrapper): Specialize for > gcc_vbase_array, gcc_cp_template_args, gcc_cp_function_args. -- Alexandre Oliva, freedom fighter http://FSFLA.org/~lxoliva/ You must be the change you wish to see in the world. -- Gandhi Be Free! -- http://FSFLA.org/ FSF Latin America board member Free Software Evangelist|Red Hat Brasil GNU Toolchain Engineer