From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 103313 invoked by alias); 5 Sep 2018 15:02:53 -0000 Mailing-List: contact fortran-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: fortran-owner@gcc.gnu.org Received: (qmail 103167 invoked by uid 89); 5 Sep 2018 15:02:52 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.8 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mail-wm0-f43.google.com Received: from mail-wm0-f43.google.com (HELO mail-wm0-f43.google.com) (74.125.82.43) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 05 Sep 2018 15:02:49 +0000 Received: by mail-wm0-f43.google.com with SMTP id t25-v6so8074388wmi.3; Wed, 05 Sep 2018 08:02:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=CdsBaF20ZtwuwyVD/U3LDMIbZ2+nQaqFpPsSlLytU28=; b=M1h+vLuc/EE3pXsay3x/2phmfchycWie5Ei32okb+dAgyL82UfiHX88TLr0tAkv4PA GNPyvMr8EnolUWgZWPZxkHWQb3M4pefcGm1vFg7BMxxSxwMp6n9aU4kh2P7qqFSXJVdj FbsATgZkV7ynAuGClYknmlyN0+Hx+dM7AuRUVppwNtpHp+ffst9GiqYfaLd7oPGtBpWy ihJGNlWgrQ6XQ5xwPf6Uvp5DggfQw0y75XLP/asdcBG6oXTB6ezR8vMZKDdmDZTjOh5f c6HXqfN8UH38SjunCVS8FE0noAYxqlA1bLILR0orrtNm+xjIC3SsqHYiPbIJ66lS1BKu bEaQ== Return-Path: Received: from s46.loc (91-119-125-11.dsl.dynamic.surfer.at. [91.119.125.11]) by smtp.gmail.com with ESMTPSA id l18-v6sm2501052wru.75.2018.09.05.08.02.46 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 05 Sep 2018 08:02:46 -0700 (PDT) Received: from cow by s46.loc with local (Exim 4.91) (envelope-from ) id 1fxZFZ-00007x-Qb; Wed, 05 Sep 2018 14:57:45 +0000 From: Bernhard Reutner-Fischer To: fortran@gcc.gnu.org Cc: Bernhard Reutner-Fischer , gcc-patches@gcc.gnu.org Subject: [PATCH,FORTRAN 15/29] Use stringpool for iso_c_binding module names Date: Wed, 05 Sep 2018 15:02:00 -0000 Message-Id: <20180905145732.404-16-rep.dot.nop@gmail.com> In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-IsSubscribed: yes X-SW-Source: 2018-09/txt/msg00049.txt.bz2 From: Bernhard Reutner-Fischer gcc/fortran/ChangeLog: 2017-11-20 Bernhard Reutner-Fischer * gfortran.h (struct CInteropKind_t): Make name a pointer. * misc.c (get_c_kind): Use pointer comparison on name to determine index. * symbol.c (generate_isocbinding_symbol): Use stringpool pointer for argument to get_c_kind (). * trans-types.c (gfc_init_c_interop_kinds): Use stringpool node for name. * module.c (import_iso_c_binding_module): Likewise. --- gcc/fortran/gfortran.h | 2 +- gcc/fortran/misc.c | 2 +- gcc/fortran/module.c | 16 +++++++++------- gcc/fortran/symbol.c | 3 ++- gcc/fortran/trans-types.c | 20 ++++++++++---------- 5 files changed, 23 insertions(+), 20 deletions(-) diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h index 039719644ea..0e164c35300 100644 --- a/gcc/fortran/gfortran.h +++ b/gcc/fortran/gfortran.h @@ -719,7 +719,7 @@ enum intmod_id typedef struct { - char name[GFC_MAX_SYMBOL_LEN + 1]; + const char *name; int value; /* Used for both integer and character values. */ bt f90_type; } diff --git a/gcc/fortran/misc.c b/gcc/fortran/misc.c index fb18c5ceb6f..29aae591ed3 100644 --- a/gcc/fortran/misc.c +++ b/gcc/fortran/misc.c @@ -278,7 +278,7 @@ get_c_kind(const char *c_kind_name, CInteropKind_t kinds_table[]) int index = 0; for (index = 0; index < ISOCBINDING_LAST; index++) - if (strcmp (kinds_table[index].name, c_kind_name) == 0) + if (kinds_table[index].name == c_kind_name) return index; return ISOCBINDING_INVALID; diff --git a/gcc/fortran/module.c b/gcc/fortran/module.c index b94411ac68b..22d9abb247f 100644 --- a/gcc/fortran/module.c +++ b/gcc/fortran/module.c @@ -6357,27 +6357,27 @@ import_iso_c_binding_module (void) #define NAMED_FUNCTION(a,b,c,d) \ case a: \ not_in_std = (gfc_option.allow_std & d) == 0; \ - name = b; \ + name = gfc_get_string ("%s", b); \ break; #define NAMED_SUBROUTINE(a,b,c,d) \ case a: \ not_in_std = (gfc_option.allow_std & d) == 0; \ - name = b; \ + name = gfc_get_string ("%s", b); \ break; #define NAMED_INTCST(a,b,c,d) \ case a: \ not_in_std = (gfc_option.allow_std & d) == 0; \ - name = b; \ + name = gfc_get_string ("%s", b); \ break; #define NAMED_REALCST(a,b,c,d) \ case a: \ not_in_std = (gfc_option.allow_std & d) == 0; \ - name = b; \ + name = gfc_get_string ("%s", b); \ break; #define NAMED_CMPXCST(a,b,c,d) \ case a: \ not_in_std = (gfc_option.allow_std & d) == 0; \ - name = b; \ + name = gfc_get_string ("%s", b); \ break; #include "iso-c-binding.def" default: @@ -6481,13 +6481,15 @@ import_iso_c_binding_module (void) return_type = c_funptr->n.sym; \ else \ return_type = NULL; \ - create_intrinsic_function (b, a, iso_c_module_name, \ + create_intrinsic_function (gfc_get_string ("%s", b), \ + a, iso_c_module_name, \ INTMOD_ISO_C_BINDING, false, \ return_type); \ break; #define NAMED_SUBROUTINE(a,b,c,d) \ case a: \ - create_intrinsic_function (b, a, iso_c_module_name, \ + create_intrinsic_function (gfc_get_string ("%s", b), \ + a, iso_c_module_name, \ INTMOD_ISO_C_BINDING, true, NULL); \ break; #include "iso-c-binding.def" diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c index cc9d4e3f9d8..ce134d2b441 100644 --- a/gcc/fortran/symbol.c +++ b/gcc/fortran/symbol.c @@ -4985,7 +4985,8 @@ generate_isocbinding_symbol (const char *mod_name, iso_c_binding_symbol s, tmp_comp->ts.f90_type = BT_INTEGER; /* The kinds for c_ptr and c_funptr are the same. */ - index = get_c_kind ("c_ptr", c_interop_kinds_table); + index = get_c_kind (gfc_get_string ("%s", "c_ptr"), + c_interop_kinds_table); tmp_comp->ts.kind = c_interop_kinds_table[index].value; tmp_comp->attr.access = ACCESS_PRIVATE; diff --git a/gcc/fortran/trans-types.c b/gcc/fortran/trans-types.c index 46f6d8c03a6..deb9993b0e3 100644 --- a/gcc/fortran/trans-types.c +++ b/gcc/fortran/trans-types.c @@ -360,45 +360,45 @@ gfc_init_c_interop_kinds (void) for (i = 0; i < ISOCBINDING_NUMBER; i++) { /* Initialize the name and value fields. */ - c_interop_kinds_table[i].name[0] = '\0'; + c_interop_kinds_table[i].name = NULL; c_interop_kinds_table[i].value = -100; c_interop_kinds_table[i].f90_type = BT_UNKNOWN; } #define NAMED_INTCST(a,b,c,d) \ - strncpy (c_interop_kinds_table[a].name, b, strlen(b) + 1); \ + c_interop_kinds_table[a].name = gfc_get_string ("%s", b); \ c_interop_kinds_table[a].f90_type = BT_INTEGER; \ c_interop_kinds_table[a].value = c; #define NAMED_REALCST(a,b,c,d) \ - strncpy (c_interop_kinds_table[a].name, b, strlen(b) + 1); \ + c_interop_kinds_table[a].name = gfc_get_string ("%s", b); \ c_interop_kinds_table[a].f90_type = BT_REAL; \ c_interop_kinds_table[a].value = c; #define NAMED_CMPXCST(a,b,c,d) \ - strncpy (c_interop_kinds_table[a].name, b, strlen(b) + 1); \ + c_interop_kinds_table[a].name = gfc_get_string ("%s", b); \ c_interop_kinds_table[a].f90_type = BT_COMPLEX; \ c_interop_kinds_table[a].value = c; #define NAMED_LOGCST(a,b,c) \ - strncpy (c_interop_kinds_table[a].name, b, strlen(b) + 1); \ + c_interop_kinds_table[a].name = gfc_get_string ("%s", b); \ c_interop_kinds_table[a].f90_type = BT_LOGICAL; \ c_interop_kinds_table[a].value = c; #define NAMED_CHARKNDCST(a,b,c) \ - strncpy (c_interop_kinds_table[a].name, b, strlen(b) + 1); \ + c_interop_kinds_table[a].name = gfc_get_string ("%s", b); \ c_interop_kinds_table[a].f90_type = BT_CHARACTER; \ c_interop_kinds_table[a].value = c; #define NAMED_CHARCST(a,b,c) \ - strncpy (c_interop_kinds_table[a].name, b, strlen(b) + 1); \ + c_interop_kinds_table[a].name = gfc_get_string ("%s", b); \ c_interop_kinds_table[a].f90_type = BT_CHARACTER; \ c_interop_kinds_table[a].value = c; #define DERIVED_TYPE(a,b,c) \ - strncpy (c_interop_kinds_table[a].name, b, strlen(b) + 1); \ + c_interop_kinds_table[a].name = gfc_get_string ("%s", b); \ c_interop_kinds_table[a].f90_type = BT_DERIVED; \ c_interop_kinds_table[a].value = c; #define NAMED_FUNCTION(a,b,c,d) \ - strncpy (c_interop_kinds_table[a].name, b, strlen(b) + 1); \ + c_interop_kinds_table[a].name = gfc_get_string ("%s", b); \ c_interop_kinds_table[a].f90_type = BT_PROCEDURE; \ c_interop_kinds_table[a].value = c; #define NAMED_SUBROUTINE(a,b,c,d) \ - strncpy (c_interop_kinds_table[a].name, b, strlen(b) + 1); \ + c_interop_kinds_table[a].name = gfc_get_string ("%s", b); \ c_interop_kinds_table[a].f90_type = BT_PROCEDURE; \ c_interop_kinds_table[a].value = c; #include "iso-c-binding.def" -- 2.19.0.rc1