diff mbox

[libcc1] add support for C++

Message ID or4m26851e.fsf@lxoliva.fsfla.org
State New
Headers show

Commit Message

Alexandre Oliva Dec. 14, 2016, 11:27 p.m. UTC
On Oct 19, 2016, Alexandre Oliva <aoliva@redhat.com> wrote:

> On Sep 23, 2016, Alexandre Oliva <aoliva@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?

Ping?

> https://gcc.gnu.org/ml/gcc-patches/2016-09/msg01744.html

I include at the end of this message two incremental patches that I've
integrated into my current version of the last patch of the series.

>> https://gcc.gnu.org/ml/gcc-patches/2015-05/msg02218.html
>> include/ChangeLog
>> 2015-05-24  Jan Kratochvil  <jan.kratochvil@redhat.com>

>> * gcc-interface.h (enum gcc_base_api_version): Add GCC_FE_VERSION_1.

>> libcc1/ChangeLog
>> 2015-05-24  Jan Kratochvil  <jan.kratochvil@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.kratochvil@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.kratochvil@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.kratochvil@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.kratochvil@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.kratochvil@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.

libcp1: ignore namespace decls in address_rewriter

Comments

Alexandre Oliva Jan. 4, 2017, 9:35 p.m. UTC | #1
On Dec 14, 2016, Alexandre Oliva <aoliva@redhat.com> wrote:

> On Oct 19, 2016, Alexandre Oliva <aoliva@redhat.com> wrote:
>> On Sep 23, 2016, Alexandre Oliva <aoliva@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?

> Ping?

>> https://gcc.gnu.org/ml/gcc-patches/2016-09/msg01744.html

Ping?

> I include at the end of this message two incremental patches that I've
> integrated into my current version of the last patch of the series.

https://gcc.gnu.org/ml/gcc-patches/2016-12/msg01325.html
diff mbox

Patch

diff --git a/libcc1/libcp1plugin.cc b/libcc1/libcp1plugin.cc
index 3ea4873..f59f587 100644
--- a/libcc1/libcp1plugin.cc
+++ b/libcc1/libcp1plugin.cc
@@ -718,7 +718,9 @@  address_rewriter (tree *in, int *walk_subtrees, void *arg)
 {
   plugin_context *ctx = (plugin_context *) arg;
 
-  if (!DECL_P (*in) || DECL_NAME (*in) == NULL_TREE)
+  if (!DECL_P (*in)
+      || TREE_CODE (*in) == NAMESPACE_DECL
+      || DECL_NAME (*in) == NULL_TREE)
     return NULL_TREE;
 
   decl_addr_value value;


libcp1: clear enum types' opaque bit, don't create redundant decls for them

diff --git a/libcc1/libcp1plugin.cc b/libcc1/libcp1plugin.cc
index f59f587..0be8190 100644
--- a/libcc1/libcp1plugin.cc
+++ b/libcc1/libcp1plugin.cc
@@ -1960,12 +1960,9 @@  plugin_start_new_enum_type (cc1_plugin::connection *self,
   gcc_assert (is_new_type);
 
   source_location loc = ctx->get_source_location (filename, line_number);
-  tree type_decl = build_decl (loc, TYPE_DECL, id, type);
-  TYPE_NAME (type) = type_decl;
-  TYPE_STUB_DECL (type) = type_decl;
-  DECL_CONTEXT (type_decl) = TYPE_CONTEXT (type);
-
-  safe_pushtag (DECL_NAME (type_decl), type, ts_current);
+  tree type_decl = TYPE_NAME (type);
+  DECL_SOURCE_LOCATION (type_decl) = loc;
+  SET_OPAQUE_ENUM_P (type, false);
 
   set_access_flags (type_decl, flags);