From patchwork Wed Dec 14 23:27:57 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandre Oliva X-Patchwork-Id: 705831 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3tfCSs2tWpz9t0v for ; Thu, 15 Dec 2016 10:28:49 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="GMqQ5S8P"; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:references:date:in-reply-to:message-id :mime-version:content-type; q=dns; s=default; b=BetLuAplL3tTnEwA A+CYxo67CmzT8SJahfuWDyk6JyP22T6f5WWgl8M+whCN/ZAKIW8BYCKcC+Ojz4Tl 0rUb9AsX6LPkJeKkW0PhLms4wGjbSUZ1VlwtKwvU+drGnka6UI6DXe40BOoTLoPt spOcEl4jI5fKLpWosbA0QyBhKIc= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:references:date:in-reply-to:message-id :mime-version:content-type; s=default; bh=8rhXtqKJ2d0Lcv7rZHUHyF 4W240=; b=GMqQ5S8P7RsahAx8OMxhf5HtFTrt4Q+fj5ArsKV1ZFRV9qQzMTgcmu mOd/SVb5zeigv2k05JEPjEuOKFfnvQCCRz831rKXWJovysr9WH4lZRFzfWXgRglP s8y2k8wmO4e1WCYJFZfNDAPFNYPFCU+XqIQduQCHKEs5goTP4O4tI= Received: (qmail 90426 invoked by alias); 14 Dec 2016 23:28:41 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 90411 invoked by uid 89); 14 Dec 2016 23:28:40 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.1 required=5.0 tests=BAYES_40, RP_MATCHES_RCVD, SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=Free!, Latin, latin, Alexandre X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 14 Dec 2016 23:28:30 +0000 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 0D77180F9A for ; Wed, 14 Dec 2016 23:28:29 +0000 (UTC) Received: from freie.home (ovpn04.gateway.prod.ext.phx2.redhat.com [10.5.9.4]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id uBENSP2s016033 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Wed, 14 Dec 2016 18:28:28 -0500 Received: from livre (livre.home [172.31.160.2]) by freie.home (8.15.2/8.15.2) with ESMTP id uBENRvs3030235; Wed, 14 Dec 2016 21:27:57 -0200 From: Alexandre Oliva To: gcc-patches@gcc.gnu.org Cc: jason@redhat.com Subject: Re: [libcc1] add support for C++ References: Date: Wed, 14 Dec 2016 21:27:57 -0200 In-Reply-To: (Alexandre Oliva's message of "Wed, 19 Oct 2016 08:21:17 -0200") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux) MIME-Version: 1.0 On Oct 19, 2016, Alexandre Oliva wrote: > On Sep 23, 2016, Alexandre Oliva 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 >> * gcc-interface.h (enum gcc_base_api_version): Add GCC_FE_VERSION_1. >> libcc1/ChangeLog >> 2015-05-24 Jan Kratochvil >> * 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 >> * 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 >> * 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 >> * 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 >> * 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 >> * 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 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);