This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [patch] Fix PR41764
Rafael Espindola <espindola@google.com> writes:
> gcc/
> 2009-10-27 Rafael Avila de Espindola <espindola@google.com>
>
> * dbxout.c (dbxout_common_check): Accept non public trees.
> * dwarf2out.c (fortran_common): Accept non public trees.
>
> gcc/fortran/
> 2009-10-27 Rafael Avila de Espindola <espindola@google.com>
>
> * trans-common.c (create_common): Set TREE_PUBLIC to false on
> fake variables.
The middle-end parts of this patch are OK.
This is OK if the Fortran maintainers are OK with the change to
trans-common.c.
Thanks.
> diff --git a/gcc/dbxout.c b/gcc/dbxout.c
> index b5688d9..0bf5e3c 100644
> --- a/gcc/dbxout.c
> +++ b/gcc/dbxout.c
> @@ -3189,7 +3189,7 @@ dbxout_common_check (tree decl, int *value)
> rtx sym_addr;
> const char *name = NULL;
>
> - /* If the decl isn't a VAR_DECL, or if it isn't public or static, or if
> + /* If the decl isn't a VAR_DECL, or if it isn't static, or if
> it does not have a value (the offset into the common area), or if it
> is thread local (as opposed to global) then it isn't common, and shouldn't
> be handled as such.
> @@ -3198,7 +3198,6 @@ dbxout_common_check (tree decl, int *value)
> for thread-local symbols. Can be handled via same mechanism as used
> in dwarf2out.c. */
> if (TREE_CODE (decl) != VAR_DECL
> - || !TREE_PUBLIC(decl)
> || !TREE_STATIC(decl)
> || !DECL_HAS_VALUE_EXPR_P(decl)
> || DECL_THREAD_LOCAL_P (decl)
> diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
> index 129ba7d..732b6a6 100644
> --- a/gcc/dwarf2out.c
> +++ b/gcc/dwarf2out.c
> @@ -15621,12 +15621,11 @@ fortran_common (tree decl, HOST_WIDE_INT *value)
> tree offset;
> int volatilep = 0, unsignedp = 0;
>
> - /* If the decl isn't a VAR_DECL, or if it isn't public or static, or if
> + /* If the decl isn't a VAR_DECL, or if it isn't static, or if
> it does not have a value (the offset into the common area), or if it
> is thread local (as opposed to global) then it isn't common, and shouldn't
> be handled as such. */
> if (TREE_CODE (decl) != VAR_DECL
> - || !TREE_PUBLIC (decl)
> || !TREE_STATIC (decl)
> || !DECL_HAS_VALUE_EXPR_P (decl)
> || !is_fortran ())
> diff --git a/gcc/fortran/trans-common.c b/gcc/fortran/trans-common.c
> index 5b1952a..1fb3c40 100644
> --- a/gcc/fortran/trans-common.c
> +++ b/gcc/fortran/trans-common.c
> @@ -680,7 +680,6 @@ create_common (gfc_common_head *com, segment_info *head, bool saw_equiv)
> var_decl = build_decl (s->sym->declared_at.lb->location,
> VAR_DECL, DECL_NAME (s->field),
> TREE_TYPE (s->field));
> - TREE_PUBLIC (var_decl) = TREE_PUBLIC (decl);
> TREE_STATIC (var_decl) = TREE_STATIC (decl);
> TREE_USED (var_decl) = TREE_USED (decl);
> if (s->sym->attr.use_assoc)
> @@ -689,7 +688,9 @@ create_common (gfc_common_head *com, segment_info *head, bool saw_equiv)
> TREE_ADDRESSABLE (var_decl) = 1;
> /* This is a fake variable just for debugging purposes. */
> TREE_ASM_WRITTEN (var_decl) = 1;
> -
> + /* Fake variables are not visible from other translation units. */
> + TREE_PUBLIC (var_decl) = 0;
> +
> /* To preserve identifier names in COMMON, chain to procedure
> scope unless at top level in a module definition. */
> if (com