public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
From: Jakub Jelinek <jakub@fedoraproject.org>
To: git-commits@fedoraproject.org
Subject: [rpms/gcc] rhel-f41-base: 4.3.1-8
Date: Mon, 29 Jun 2026 12:23:52 GMT	[thread overview]
Message-ID: <178273583281.1.1700724365360721044.rpms-gcc-dc4fc4efbaa7@fedoraproject.org> (raw)

A new commit has been pushed.

Repo   : rpms/gcc
Branch : rhel-f41-base
Commit : dc4fc4efbaa7f4704b6f4dbd64e041bc297ed681
Author : Jakub Jelinek <jakub@fedoraproject.org>
Date   : 2008-08-25T12:07:40+00:00
Stats  : +1010/-0 in 1 file(s)
URL    : https://src.fedoraproject.org/rpms/gcc/c/dc4fc4efbaa7f4704b6f4dbd64e041bc297ed681?branch=rhel-f41-base

Log:
4.3.1-8

---
diff --git a/gcc43-fortran-debug2.patch b/gcc43-fortran-debug2.patch
new file mode 100644
index 0000000..9e0708e
--- /dev/null
+++ b/gcc43-fortran-debug2.patch
@@ -0,0 +1,1010 @@
+2008-08-22  Jakub Jelinek  <jakub@redhat.com>
+
+	PR fortran/29635
+	PR fortran/23057
+	* debug.h (struct gcc_debug_hooks): Add NAME and CHILD
+	arguments to imported_module_or_decl.
+	(debug_nothing_tree_tree): Removed.
+	(debug_nothing_tree_tree_tree_bool): New prototype.
+	* debug.c (do_nothing_debug_hooks): Adjust.
+	(debug_nothing_tree_tree): Removed.
+	(debug_nothing_tree_tree_tree_bool): New function.
+	* dwarf2out.c (is_symbol_die): Handle DW_TAG_module.
+	(gen_variable_die): Put all common vars for the
+	same COMMON block under one DW_TAG_common_block.
+	(declare_in_namespace): Return new context_die, for Fortran
+	return the module DIE instead of adding extra declarations into
+	the namespace.
+	(gen_type_die_with_usage): Adjust declare_in_namespace caller.
+	(gen_namespace_die): If is_fortran (), generate DW_TAG_module
+	instead of DW_TAG_namespace.  If DECL_EXTERNAL is set, add
+	DW_AT_declaration.
+	(dwarf2out_global_decl): Don't skip Fortran global vars.
+	(gen_decl_die): Likewise.  Adjust declare_in_namespace callers.
+	(dwarf2out_imported_module_or_decl): Add NAME and CHILD arguments.
+	If NAME is non-NULL, add DW_AT_name.  If CHILD is non-NULL, put
+	DW_TAG_imported_declaration as child of previous
+	DW_TAG_imported_module.
+	* dbxout.c (dbx_debug_hooks, xcoff_debug_hooks): Adjust.
+	* sdbout.c (sdb_debug_hooks): Likewise.
+	* vmsdbgout.c (vmsdbg_debug_hooks): Likewise.
+
+	* name-lookup.c (do_using_directive, cp_emit_debug_info_for_using):
+	Adjust debug_hooks->imported_module_or_decl callers.
+
+	* f95-lang.c (gfc_init_ts): New function.
+	(LANG_HOOKS_INIT_TS): Define.
+	* gfortran.h (gfc_use_rename): New type, moved from module.c.
+	(gfc_get_use_rename): New macro, moved from module.c.
+	(gfc_use_list): New type.
+	(gfc_get_use_list): New macro.
+	(gfc_namespace): Add use_stmts field.
+	(gfc_free_use_stmts): New prototype.
+	* Make-lang.in (fortran/trans-decl.o): Depend on debug.h.
+	* module.c (gfc_use_rename, gfc_get_use_rename): Moved to
+	gfortran.h.
+	(gfc_use_module): Chain the USE statement info to
+	ns->use_stmts.
+	(gfc_free_use_stmts): New function.
+	* symbol.c (gfc_free_namespace): Call gfc_free_use_stmts.
+	* trans.h (struct module_htab_entry): New type.
+	(gfc_find_module, gfc_module_add_decl): New functions.
+	* trans.c (gfc_generate_module_code): Create NAMESPACE_DECL for
+	the module, adjust DECL_CONTEXTs of module procedures and
+	call gfc_module_add_decl for them.
+	* trans-common.c (build_common_decl): Set DECL_IGNORED_P
+	on the common variable.
+	(create_common): Set DECL_IGNORED_P for use associated vars.
+	* trans-decl.c: Include debug.h.
+	(gfc_get_symbol_decl): Set DECL_IGNORED_P on use_assoc vars from
+	modules.
+	(build_function_decl): Allow current_function_decl's context
+	to be a NAMESPACE_DECL.
+	(module_htab, cur_module): New variables.
+	(module_htab_do_hash, module_htab_eq, module_htab_decls_hash,
+	module_htab_decls_eq, gfc_find_module, gfc_module_add_decl): New
+	functions.
+	(gfc_create_module_variable): Adjust DECL_CONTEXTs of module
+	variables and types and call gfc_module_add_decl for them.
+	(gfc_generate_module_vars): Temporarily set cur_module.
+	(gfc_trans_use_stmts): New function.
+	(gfc_generate_function_code): Call it.
+	(gfc_generate_block_data): Set DECL_IGNORED_P on decl.
+	* trans-types.c (gfc_get_derived_type): Adjust DECL_CONTEXT
+	and TYPE_CONTEXT of module derived types.
+
+--- gcc/fortran/f95-lang.c.jj	2008-08-21 10:19:49.000000000 +0200
++++ gcc/fortran/f95-lang.c	2008-08-21 10:21:30.000000000 +0200
+@@ -99,6 +99,7 @@ void insert_block (tree);
+ static void gfc_clear_binding_stack (void);
+ static void gfc_be_parse_file (int);
+ static alias_set_type gfc_get_alias_set (tree);
++static void gfc_init_ts (void);
+ 
+ #undef LANG_HOOKS_NAME
+ #undef LANG_HOOKS_INIT
+@@ -113,6 +114,7 @@ static alias_set_type gfc_get_alias_set 
+ #undef LANG_HOOKS_TYPE_FOR_SIZE
+ #undef LANG_HOOKS_CLEAR_BINDING_STACK
+ #undef LANG_HOOKS_GET_ALIAS_SET
++#undef LANG_HOOKS_INIT_TS
+ #undef LANG_HOOKS_OMP_PRIVATIZE_BY_REFERENCE
+ #undef LANG_HOOKS_OMP_PREDETERMINED_SHARING
+ #undef LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR
+@@ -140,6 +142,7 @@ static alias_set_type gfc_get_alias_set 
+ #define LANG_HOOKS_TYPE_FOR_SIZE           gfc_type_for_size
+ #define LANG_HOOKS_CLEAR_BINDING_STACK     gfc_clear_binding_stack
+ #define LANG_HOOKS_GET_ALIAS_SET	   gfc_get_alias_set
++#define LANG_HOOKS_INIT_TS		gfc_init_ts
+ #define LANG_HOOKS_OMP_PRIVATIZE_BY_REFERENCE	gfc_omp_privatize_by_reference
+ #define LANG_HOOKS_OMP_PREDETERMINED_SHARING	gfc_omp_predetermined_sharing
+ #define LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR	gfc_omp_clause_default_ctor
+@@ -1184,5 +1187,15 @@ gfc_init_builtin_functions (void)
+ #undef DEFINE_MATH_BUILTIN_C
+ #undef DEFINE_MATH_BUILTIN
+ 
++static void
++gfc_init_ts (void)
++{
++  tree_contains_struct[NAMESPACE_DECL][TS_DECL_NON_COMMON] = 1;
++  tree_contains_struct[NAMESPACE_DECL][TS_DECL_WITH_VIS] = 1;
++  tree_contains_struct[NAMESPACE_DECL][TS_DECL_WRTL] = 1;
++  tree_contains_struct[NAMESPACE_DECL][TS_DECL_COMMON] = 1;
++  tree_contains_struct[NAMESPACE_DECL][TS_DECL_MINIMAL] = 1;
++}
++
+ #include "gt-fortran-f95-lang.h"
+ #include "gtype-fortran.h"
+--- gcc/fortran/trans.c.jj	2008-08-21 10:19:49.000000000 +0200
++++ gcc/fortran/trans.c	2008-08-21 10:21:30.000000000 +0200
+@@ -1209,6 +1209,19 @@ void
+ gfc_generate_module_code (gfc_namespace * ns)
+ {
+   gfc_namespace *n;
++  struct module_htab_entry *entry;
++
++  gcc_assert (ns->proc_name->backend_decl == NULL);
++  ns->proc_name->backend_decl
++    = build_decl (NAMESPACE_DECL, get_identifier (ns->proc_name->name),
++		  void_type_node);
++  gfc_set_decl_location (ns->proc_name->backend_decl,
++			 &ns->proc_name->declared_at);
++  entry = gfc_find_module (ns->proc_name->name);
++  if (entry->namespace_decl)
++    /* Buggy sourcecode, using a module before defining it?  */
++    htab_empty (entry->decls);
++  entry->namespace_decl = ns->proc_name->backend_decl;
+ 
+   gfc_generate_module_vars (ns);
+ 
+@@ -1216,10 +1229,21 @@ gfc_generate_module_code (gfc_namespace 
+      sibling calls.  */
+   for (n = ns->contained; n; n = n->sibling)
+     {
++      gfc_entry_list *el;
++
+       if (!n->proc_name)
+         continue;
+ 
+       gfc_create_function_decl (n);
++      gcc_assert (DECL_CONTEXT (n->proc_name->backend_decl) == NULL_TREE);
++      DECL_CONTEXT (n->proc_name->backend_decl) = ns->proc_name->backend_decl;
++      gfc_module_add_decl (entry, n->proc_name->backend_decl);
++      for (el = ns->entries; el; el = el->next)
++	{
++	  gcc_assert (DECL_CONTEXT (el->sym->backend_decl) == NULL_TREE);
++	  DECL_CONTEXT (el->sym->backend_decl) = ns->proc_name->backend_decl;
++	  gfc_module_add_decl (entry, el->sym->backend_decl);
++	}
+     }
+ 
+   for (n = ns->contained; n; n = n->sibling)
+--- gcc/fortran/module.c.jj	2008-08-21 10:19:49.000000000 +0200
++++ gcc/fortran/module.c	2008-08-21 10:21:30.000000000 +0200
+@@ -161,20 +161,6 @@ pointer_info;
+ #define gfc_get_pointer_info() gfc_getmem(sizeof(pointer_info))
+ 
+ 
+-/* Lists of rename info for the USE statement.  */
+-
+-typedef struct gfc_use_rename
+-{
+-  char local_name[GFC_MAX_SYMBOL_LEN + 1], use_name[GFC_MAX_SYMBOL_LEN + 1];
+-  struct gfc_use_rename *next;
+-  int found;
+-  gfc_intrinsic_op operator;
+-  locus where;
+-}
+-gfc_use_rename;
+-
+-#define gfc_get_use_rename() gfc_getmem(sizeof(gfc_use_rename))
+-
+ /* Local variables */
+ 
+ /* The FILE for the module we're reading or writing.  */
+@@ -4749,6 +4735,7 @@ gfc_use_module (void)
+   gfc_state_data *p;
+   int c, line, start;
+   gfc_symtree *mod_symtree;
++  gfc_use_list *use_stmt;
+ 
+   filename = (char *) alloca (strlen (module_name) + strlen (MODULE_EXTENSION)
+ 			      + 1);
+@@ -4841,6 +4828,33 @@ gfc_use_module (void)
+   pi_root = NULL;
+ 
+   fclose (module_fp);
++
++  use_stmt = gfc_get_use_list ();
++  use_stmt->module_name = gfc_get_string (module_name);
++  use_stmt->only_flag = only_flag;
++  use_stmt->rename = gfc_rename_list;
++  gfc_rename_list = NULL;
++  use_stmt->next = gfc_current_ns->use_stmts;
++  gfc_current_ns->use_stmts = use_stmt;
++}
++
++
++void
++gfc_free_use_stmts (gfc_use_list *use_stmts)
++{
++  gfc_use_list *next;
++  for (; use_stmts; use_stmts = next)
++    {
++      gfc_use_rename *next_rename;
++
++      for (; use_stmts->rename; use_stmts->rename = next_rename)
++	{
++	  next_rename = use_stmts->rename->next;
++	  gfc_free (use_stmts->rename);
++	}
++      next = use_stmts->next;
++      gfc_free (use_stmts);
++    }
+ }
+ 
+ 
+--- gcc/fortran/Make-lang.in.jj	2008-08-21 10:19:49.000000000 +0200
++++ gcc/fortran/Make-lang.in	2008-08-21 10:21:30.000000000 +0200
+@@ -310,7 +310,7 @@ fortran/convert.o: $(GFORTRAN_TRANS_DEPS
+ fortran/trans.o: $(GFORTRAN_TRANS_DEPS)
+ fortran/trans-decl.o: $(GFORTRAN_TRANS_DEPS) gt-fortran-trans-decl.h \
+   $(CGRAPH_H) $(TARGET_H) $(FUNCTION_H) $(FLAGS_H) $(RTL_H) $(TREE_GIMPLE_H) \
+-  $(TREE_DUMP_H)
++  $(TREE_DUMP_H) debug.h
+ fortran/trans-types.o: $(GFORTRAN_TRANS_DEPS) gt-fortran-trans-types.h \
+   $(REAL_H) toplev.h $(TARGET_H) $(FLAGS_H) dwarf2out.h
+ fortran/trans-const.o: $(GFORTRAN_TRANS_DEPS)
+--- gcc/fortran/gfortran.h.jj	2008-08-21 10:19:49.000000000 +0200
++++ gcc/fortran/gfortran.h	2008-08-21 10:21:30.000000000 +0200
+@@ -1093,6 +1093,35 @@ gfc_entry_list;
+ #define gfc_get_entry_list() \
+   (gfc_entry_list *) gfc_getmem(sizeof(gfc_entry_list))
+ 
++/* Lists of rename info for the USE statement.  */
++
++typedef struct gfc_use_rename
++{
++  char local_name[GFC_MAX_SYMBOL_LEN + 1], use_name[GFC_MAX_SYMBOL_LEN + 1];
++  struct gfc_use_rename *next;
++  int found;
++  gfc_intrinsic_op operator;
++  locus where;
++}
++gfc_use_rename;
++
++#define gfc_get_use_rename() XCNEW (gfc_use_rename);
++
++/* A list of all USE statements in a namespace.  */
++
++typedef struct gfc_use_list
++{
++  const char *module_name;
++  int only_flag;
++  struct gfc_use_rename *rename;
++  /* Next USE statement.  */
++  struct gfc_use_list *next;
++}
++gfc_use_list;
++
++#define gfc_get_use_list() \
++  (gfc_use_list *) gfc_getmem(sizeof(gfc_use_list))
++
+ /* Within a namespace, symbols are pointed to by symtree nodes that
+    are linked together in a balanced binary tree.  There can be
+    several symtrees pointing to the same symbol node via USE
+@@ -1189,6 +1218,9 @@ typedef struct gfc_namespace
+   /* A list of all alternate entry points to this procedure (or NULL).  */
+   gfc_entry_list *entries;
+ 
++  /* A list of USE statements in this namespace.  */
++  gfc_use_list *use_stmts;
++
+   /* Set to 1 if namespace is a BLOCK DATA program unit.  */
+   int is_block_data;
+ 
+@@ -2340,6 +2372,7 @@ void gfc_module_init_2 (void);
+ void gfc_module_done_2 (void);
+ void gfc_dump_module (const char *, int);
+ bool gfc_check_access (gfc_access, gfc_access);
++void gfc_free_use_stmts (gfc_use_list *);
+ 
+ /* primary.c */
+ symbol_attribute gfc_variable_attr (gfc_expr *, gfc_typespec *);
+--- gcc/fortran/symbol.c.jj	2008-08-21 10:19:49.000000000 +0200
++++ gcc/fortran/symbol.c	2008-08-21 10:21:30.000000000 +0200
+@@ -3042,6 +3042,7 @@ gfc_free_namespace (gfc_namespace *ns)
+ 
+   gfc_free_equiv (ns->equiv);
+   gfc_free_equiv_lists (ns->equiv_lists);
++  gfc_free_use_stmts (ns->use_stmts);
+ 
+   for (i = GFC_INTRINSIC_BEGIN; i != GFC_INTRINSIC_END; i++)
+     gfc_free_interface (ns->op[i]);
+--- gcc/fortran/trans-types.c.jj	2008-08-21 10:19:49.000000000 +0200
++++ gcc/fortran/trans-types.c	2008-08-21 10:21:30.000000000 +0200
+@@ -1934,12 +1934,23 @@ gfc_get_derived_type (gfc_symbol * deriv
+ 
+   gfc_finish_type (typenode);
+   gfc_set_decl_location (TYPE_STUB_DECL (typenode), &derived->declared_at);
++  if (derived->module && derived->ns->proc_name->attr.flavor == FL_MODULE)
++    {
++      if (derived->ns->proc_name->backend_decl
++	  && TREE_CODE (derived->ns->proc_name->backend_decl)
++	     == NAMESPACE_DECL)
++	{
++	  TYPE_CONTEXT (typenode) = derived->ns->proc_name->backend_decl;
++	  DECL_CONTEXT (TYPE_STUB_DECL (typenode))
++	    = derived->ns->proc_name->backend_decl;
++	}
++    }
+ 
+   derived->backend_decl = typenode;
+ 
+-    /* Add this backend_decl to all the other, equal derived types.  */
+-    for (dt = gfc_derived_types; dt; dt = dt->next)
+-      copy_dt_decls_ifequal (derived, dt->derived);
++  /* Add this backend_decl to all the other, equal derived types.  */
++  for (dt = gfc_derived_types; dt; dt = dt->next)
++    copy_dt_decls_ifequal (derived, dt->derived);
+ 
+   return derived->backend_decl;
+ }
+--- gcc/fortran/trans.h.jj	2008-08-21 10:19:49.000000000 +0200
++++ gcc/fortran/trans.h	2008-08-21 10:21:30.000000000 +0200
+@@ -429,6 +429,16 @@ void gfc_generate_block_data (gfc_namesp
+ /* Output a decl for a module variable.  */
+ void gfc_generate_module_vars (gfc_namespace *);
+ 
++struct module_htab_entry GTY(())
++{
++  const char *name;
++  tree namespace_decl;
++  htab_t GTY ((param_is (union tree_node))) decls;
++};
++
++struct module_htab_entry *gfc_find_module (const char *);
++void gfc_module_add_decl (struct module_htab_entry *, tree);
++
+ /* Get and set the current location.  */
+ void gfc_set_backend_locus (locus *);
+ void gfc_get_backend_locus (locus *);
+--- gcc/fortran/trans-decl.c	2008-08-21 11:56:09.000000000 +0200
++++ gcc/fortran/trans-decl.c	2008-08-22 21:31:28.000000000 +0200
+@@ -35,6 +35,7 @@ along with GCC; see the file COPYING3.  
+ #include "function.h"
+ #include "flags.h"
+ #include "cgraph.h"
++#include "debug.h"
+ #include "gfortran.h"
+ #include "trans.h"
+ #include "trans-types.h"
+@@ -982,7 +983,11 @@ gfc_get_symbol_decl (gfc_symbol * sym)
+      This is done here rather than in gfc_finish_var_decl because it
+      is different for string length variables.  */
+   if (sym->module)
+-    SET_DECL_ASSEMBLER_NAME (decl, gfc_sym_mangled_identifier (sym));
++    {
++      SET_DECL_ASSEMBLER_NAME (decl, gfc_sym_mangled_identifier (sym));
++      if (sym->attr.use_assoc)
++	DECL_IGNORED_P (decl) = 1;
++    }
+ 
+   if (sym->attr.dimension)
+     {
+@@ -1247,7 +1252,9 @@ build_function_decl (gfc_symbol * sym)
+ 
+   /* Allow only one nesting level.  Allow public declarations.  */
+   gcc_assert (current_function_decl == NULL_TREE
+-	  || DECL_CONTEXT (current_function_decl) == NULL_TREE);
++	      || DECL_CONTEXT (current_function_decl) == NULL_TREE
++	      || TREE_CODE (DECL_CONTEXT (current_function_decl))
++		 == NAMESPACE_DECL);
+ 
+   type = gfc_get_function_type (sym);
+   fndecl = build_decl (FUNCTION_DECL, gfc_sym_identifier (sym), type);
+@@ -2790,6 +2797,88 @@ gfc_trans_deferred_vars (gfc_symbol * pr
+   return gfc_finish_block (&body);
+ }
+ 
++static GTY ((param_is (struct module_htab_entry))) htab_t module_htab;
++
++/* Hash and equality functions for module_htab.  */
++
++static hashval_t
++module_htab_do_hash (const void *x)
++{
++  return htab_hash_string (((const struct module_htab_entry *)x)->name);
++}
++
++static int
++module_htab_eq (const void *x1, const void *x2)
++{
++  return strcmp ((((const struct module_htab_entry *)x1)->name),
++		 (const char *)x2) == 0;
++}
++
++/* Hash and equality functions for module_htab's decls.  */
++
++static hashval_t
++module_htab_decls_hash (const void *x)
++{
++  const_tree t = (const_tree) x;
++  const_tree n = DECL_NAME (t);
++  if (n == NULL_TREE)
++    n = TYPE_NAME (TREE_TYPE (t));
++  return htab_hash_string (IDENTIFIER_POINTER (n));
++}
++
++static int
++module_htab_decls_eq (const void *x1, const void *x2)
++{
++  const_tree t1 = (const_tree) x1;
++  const_tree n1 = DECL_NAME (t1);
++  if (n1 == NULL_TREE)
++    n1 = TYPE_NAME (TREE_TYPE (t1));
++  return strcmp (IDENTIFIER_POINTER (n1), (const char *) x2) == 0;
++}
++
++struct module_htab_entry *
++gfc_find_module (const char *name)
++{
++  void **slot;
++
++  if (! module_htab)
++    module_htab = htab_create_ggc (10, module_htab_do_hash,
++				   module_htab_eq, NULL);
++
++  slot = htab_find_slot_with_hash (module_htab, name,
++				   htab_hash_string (name), INSERT);
++  if (*slot == NULL)
++    {
++      struct module_htab_entry *entry = GGC_CNEW (struct module_htab_entry);
++
++      entry->name = gfc_get_string (name);
++      entry->decls = htab_create_ggc (10, module_htab_decls_hash,
++				      module_htab_decls_eq, NULL);
++      *slot = (void *) entry;
++    }
++  return (struct module_htab_entry *) *slot;
++}
++
++void
++gfc_module_add_decl (struct module_htab_entry *entry, tree decl)
++{
++  void **slot;
++  const char *name;
++
++  if (DECL_NAME (decl))
++    name = IDENTIFIER_POINTER (DECL_NAME (decl));
++  else
++    {
++      gcc_assert (TREE_CODE (decl) == TYPE_DECL);
++      name = IDENTIFIER_POINTER (TYPE_NAME (TREE_TYPE (decl)));
++    }
++  slot = htab_find_slot_with_hash (entry->decls, name,
++				   htab_hash_string (name), INSERT);
++  if (*slot == NULL)
++    *slot = (void *) decl;
++}
++
++static struct module_htab_entry *cur_module;
+ 
+ /* Output an initialized decl for a module variable.  */
+ 
+@@ -2809,6 +2898,22 @@ gfc_create_module_variable (gfc_symbol *
+       && sym->ts.type == BT_DERIVED)
+     sym->backend_decl = gfc_typenode_for_spec (&(sym->ts));
+ 
++  if (sym->attr.flavor == FL_DERIVED
++      && sym->backend_decl
++      && TREE_CODE (sym->backend_decl) == RECORD_TYPE)
++    {
++      decl = sym->backend_decl;
++      gcc_assert (sym->ns->proc_name->attr.flavor == FL_MODULE);
++      gcc_assert (TYPE_CONTEXT (decl) == NULL_TREE
++		  || TYPE_CONTEXT (decl) == sym->ns->proc_name->backend_decl);
++      gcc_assert (DECL_CONTEXT (TYPE_STUB_DECL (decl)) == NULL_TREE
++		  || DECL_CONTEXT (TYPE_STUB_DECL (decl))
++		     == sym->ns->proc_name->backend_decl);
++      TYPE_CONTEXT (decl) = sym->ns->proc_name->backend_decl;
++      DECL_CONTEXT (TYPE_STUB_DECL (decl)) = sym->ns->proc_name->backend_decl;
++      gfc_module_add_decl (cur_module, TYPE_STUB_DECL (decl));
++    }
++
+   /* Only output variables and array valued, or derived type,
+      parameters.  */
+   if (sym->attr.flavor != FL_VARIABLE
+@@ -2816,6 +2921,15 @@ gfc_create_module_variable (gfc_symbol *
+ 	       && (sym->attr.dimension || sym->ts.type == BT_DERIVED)))
+     return;
+ 
++  if ((sym->attr.in_common || sym->attr.in_equivalence) && sym->backend_decl)
++    {
++      decl = sym->backend_decl;
++      gcc_assert (DECL_CONTEXT (decl) == NULL_TREE);
++      gcc_assert (sym->ns->proc_name->attr.flavor == FL_MODULE);
++      DECL_CONTEXT (decl) = sym->ns->proc_name->backend_decl;
++      gfc_module_add_decl (cur_module, decl);
++    }
++
+   /* Don't generate variables from other modules. Variables from
+      COMMONs will already have been generated.  */
+   if (sym->attr.use_assoc || sym->attr.in_common)
+@@ -2823,8 +2937,8 @@ gfc_create_module_variable (gfc_symbol *
+ 
+   /* Equivalenced variables arrive here after creation.  */
+   if (sym->backend_decl
+-	&& (sym->equiv_built || sym->attr.in_equivalence))
+-      return;
++      && (sym->equiv_built || sym->attr.in_equivalence))
++    return;
+ 
+   if (sym->backend_decl)
+     internal_error ("backend decl for module variable %s already exists",
+@@ -2837,7 +2951,11 @@ gfc_create_module_variable (gfc_symbol *
+ 
+   /* Create the variable.  */
+   pushdecl (decl);
++  gcc_assert (DECL_CONTEXT (decl) == NULL_TREE);
++  gcc_assert (sym->ns->proc_name->attr.flavor == FL_MODULE);
++  DECL_CONTEXT (decl) = sym->ns->proc_name->backend_decl;
+   rest_of_decl_compilation (decl, 1, 0);
++  gfc_module_add_decl (cur_module, decl);
+ 
+   /* Also add length of strings.  */
+   if (sym->ts.type == BT_CHARACTER)
+@@ -2860,6 +2978,7 @@ void
+ gfc_generate_module_vars (gfc_namespace * ns)
+ {
+   module_namespace = ns;
++  cur_module = gfc_find_module (ns->proc_name->name);
+ 
+   /* Check if the frontend left the namespace in a reasonable state.  */
+   gcc_assert (ns->proc_name && !ns->proc_name->tlink);
+@@ -2869,6 +2988,79 @@ gfc_generate_module_vars (gfc_namespace 
+ 
+   /* Create decls for all the module variables.  */
+   gfc_traverse_ns (ns, gfc_create_module_variable);
++
++  cur_module = NULL;
++}
++
++static void
++gfc_trans_use_stmts (gfc_namespace * ns)
++{
++  gfc_use_list *use_stmt;
++  for (use_stmt = ns->use_stmts; use_stmt; use_stmt = use_stmt->next)
++    {
++      struct module_htab_entry *entry
++	= gfc_find_module (use_stmt->module_name);
++      gfc_use_rename *rent;
++
++      if (entry->namespace_decl == NULL)
++	{
++	  entry->namespace_decl
++	    = build_decl (NAMESPACE_DECL,
++			  get_identifier (use_stmt->module_name),
++			  void_type_node);
++	  DECL_EXTERNAL (entry->namespace_decl) = 1;
++	}
++      if (!use_stmt->only_flag)
++	(*debug_hooks->imported_module_or_decl) (entry->namespace_decl,
++						 NULL_TREE,
++						 ns->proc_name->backend_decl,
++						 false);
++      for (rent = use_stmt->rename; rent; rent = rent->next)
++	{
++	  tree decl, local_name;
++	  void **slot;
++
++	  if (rent->operator != INTRINSIC_NONE)
++	    continue;
++
++	  slot = htab_find_slot_with_hash (entry->decls, rent->use_name,
++					   htab_hash_string (rent->use_name),
++					   INSERT);
++	  if (*slot == NULL)
++	    {
++	      gfc_symtree *st;
++
++	      st = gfc_find_symtree (ns->sym_root,
++				     rent->local_name[0]
++				     ? rent->local_name : rent->use_name);
++	      gcc_assert (st && st->n.sym->attr.use_assoc);
++	      if (st->n.sym->backend_decl && DECL_P (st->n.sym->backend_decl))
++		{
++		  gcc_assert (DECL_EXTERNAL (entry->namespace_decl));
++		  decl = copy_node (st->n.sym->backend_decl);
++		  DECL_CONTEXT (decl) = entry->namespace_decl;
++		  DECL_EXTERNAL (decl) = 1;
++		  DECL_IGNORED_P (decl) = 0;
++		  DECL_INITIAL (decl) = NULL_TREE;
++		}
++	      else
++		{
++		  *slot = error_mark_node;
++		  htab_clear_slot (entry->decls, slot);
++		  continue;
++		}
++	      *slot = decl;
++	    }
++	  decl = (tree) *slot;
++	  if (rent->local_name[0])
++	    local_name = get_identifier (rent->local_name);
++	  else
++	    local_name = NULL_TREE;
++	  (*debug_hooks->imported_module_or_decl) (decl, local_name,
++						   ns->proc_name->backend_decl,
++						   !use_stmt->only_flag);
++	}
++    }
+ }
+ 
+ static void
+@@ -3373,6 +3567,8 @@ gfc_generate_function_code (gfc_namespac
+       gfc_gimplify_function (fndecl);
+       cgraph_finalize_function (fndecl, false);
+     }
++
++  gfc_trans_use_stmts (ns);
+ }
+ 
+ void
+@@ -3464,6 +3660,7 @@ gfc_generate_block_data (gfc_namespace *
+   decl = build_decl (VAR_DECL, id, gfc_array_index_type);
+   TREE_PUBLIC (decl) = 1;
+   TREE_STATIC (decl) = 1;
++  DECL_IGNORED_P (decl) = 1;
+ 
+   pushdecl (decl);
+   rest_of_decl_compilation (decl, 1, 0);
+--- gcc/fortran/trans-common.c.jj	2008-08-21 10:19:49.000000000 +0200
++++ gcc/fortran/trans-common.c	2008-08-21 10:21:30.000000000 +0200
+@@ -416,6 +416,7 @@ build_common_decl (gfc_common_head *com,
+       SET_DECL_ASSEMBLER_NAME (decl, gfc_sym_mangled_common_id (com));
+       TREE_PUBLIC (decl) = 1;
+       TREE_STATIC (decl) = 1;
++      DECL_IGNORED_P (decl) = 1;
+       if (!com->is_bind_c)
+ 	DECL_ALIGN (decl) = BIGGEST_ALIGNMENT;
+       else
+@@ -680,6 +681,8 @@ create_common (gfc_common_head *com, seg
+       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)
++	DECL_IGNORED_P (var_decl) = 1;
+       if (s->sym->attr.target)
+ 	TREE_ADDRESSABLE (var_decl) = 1;
+       /* This is a fake variable just for debugging purposes.  */
+--- gcc/cp/name-lookup.c.jj	2008-08-21 10:19:52.000000000 +0200
++++ gcc/cp/name-lookup.c	2008-08-21 10:21:30.000000000 +0200
+@@ -3401,7 +3401,8 @@ do_using_directive (tree namespace)
+ 
+   /* Emit debugging info.  */
+   if (!processing_template_decl)
+-    (*debug_hooks->imported_module_or_decl) (namespace, context);
++    (*debug_hooks->imported_module_or_decl) (namespace, NULL_TREE,
++					     context, false);
+ }
+ 
+ /* Deal with a using-directive seen by the parser.  Currently we only
+@@ -5234,7 +5235,7 @@ cp_emit_debug_info_for_using (tree t, tr
+   /* FIXME: Handle TEMPLATE_DECLs.  */
+   for (t = OVL_CURRENT (t); t; t = OVL_NEXT (t))
+     if (TREE_CODE (t) != TEMPLATE_DECL)
+-      (*debug_hooks->imported_module_or_decl) (t, context);
++      (*debug_hooks->imported_module_or_decl) (t, NULL_TREE, context, false);
+ }
+ 
+ #include "gt-cp-name-lookup.h"
+--- gcc/debug.h.jj	2008-08-21 10:19:49.000000000 +0200
++++ gcc/debug.h	2008-08-21 10:21:30.000000000 +0200
+@@ -98,7 +98,8 @@ struct gcc_debug_hooks
+   void (* type_decl) (tree decl, int local);
+ 
+   /* Debug information for imported modules and declarations.  */
+-  void (* imported_module_or_decl) (tree decl, tree context);
++  void (* imported_module_or_decl) (tree decl, tree name,
++				    tree context, bool child);
+ 
+   /* DECL is an inline function, whose body is present, but which is
+      not being output at this point.  */
+@@ -139,7 +140,7 @@ extern void debug_nothing_int (unsigned 
+ extern void debug_nothing_int_int (unsigned int, unsigned int);
+ extern void debug_nothing_tree (tree);
+ extern void debug_nothing_tree_int (tree, int);
+-extern void debug_nothing_tree_tree (tree, tree);
++extern void debug_nothing_tree_tree_tree_bool (tree, tree, tree, bool);
+ extern bool debug_true_const_tree (const_tree);
+ extern void debug_nothing_rtx (rtx);
+ 
+--- gcc/vmsdbgout.c.jj	2008-08-21 10:19:48.000000000 +0200
++++ gcc/vmsdbgout.c	2008-08-21 10:21:30.000000000 +0200
+@@ -204,7 +204,7 @@ const struct gcc_debug_hooks vmsdbg_debu
+    vmsdbgout_decl,
+    vmsdbgout_global_decl,
+    debug_nothing_tree_int,	  /* type_decl */
+-   debug_nothing_tree_tree,       /* imported_module_or_decl */
++   debug_nothing_tree_tree_tree_bool, /* imported_module_or_decl */
+    debug_nothing_tree,		  /* deferred_inline_function */
+    vmsdbgout_abstract_function,
+    debug_nothing_rtx,		  /* label */
+--- gcc/dbxout.c.jj	2008-08-21 10:19:49.000000000 +0200
++++ gcc/dbxout.c	2008-08-21 10:21:30.000000000 +0200
+@@ -369,7 +369,7 @@ const struct gcc_debug_hooks dbx_debug_h
+   dbxout_function_decl,
+   dbxout_global_decl,		         /* global_decl */
+   dbxout_type_decl,			 /* type_decl */
+-  debug_nothing_tree_tree,               /* imported_module_or_decl */
++  debug_nothing_tree_tree_tree_bool,	 /* imported_module_or_decl */
+   debug_nothing_tree,		         /* deferred_inline_function */
+   debug_nothing_tree,		         /* outlining_inline_function */
+   debug_nothing_rtx,		         /* label */
+@@ -401,7 +401,7 @@ const struct gcc_debug_hooks xcoff_debug
+   debug_nothing_tree,		         /* function_decl */
+   dbxout_global_decl,		         /* global_decl */
+   dbxout_type_decl,			 /* type_decl */
+-  debug_nothing_tree_tree,               /* imported_module_or_decl */
++  debug_nothing_tree_tree_tree_bool,	 /* imported_module_or_decl */
+   debug_nothing_tree,		         /* deferred_inline_function */
+   debug_nothing_tree,		         /* outlining_inline_function */
+   debug_nothing_rtx,		         /* label */
+--- gcc/debug.c.jj	2008-08-21 10:19:49.000000000 +0200
++++ gcc/debug.c	2008-08-21 10:21:30.000000000 +0200
+@@ -42,7 +42,7 @@ const struct gcc_debug_hooks do_nothing_
+   debug_nothing_tree,		         /* function_decl */
+   debug_nothing_tree,		         /* global_decl */
+   debug_nothing_tree_int,		 /* type_decl */
+-  debug_nothing_tree_tree,               /* imported_module_or_decl */
++  debug_nothing_tree_tree_tree_bool,	 /* imported_module_or_decl */
+   debug_nothing_tree,		         /* deferred_inline_function */
+   debug_nothing_tree,		         /* outlining_inline_function */
+   debug_nothing_rtx,		         /* label */
+@@ -66,8 +66,10 @@ debug_nothing_tree (tree decl ATTRIBUTE_
+ }
+ 
+ void
+-debug_nothing_tree_tree (tree t1 ATTRIBUTE_UNUSED,
+-			 tree t2 ATTRIBUTE_UNUSED)
++debug_nothing_tree_tree_tree_bool (tree t1 ATTRIBUTE_UNUSED,
++				   tree t2 ATTRIBUTE_UNUSED,
++				   tree t3 ATTRIBUTE_UNUSED,
++				   bool b1 ATTRIBUTE_UNUSED)
+ {
+ }
+ 
+--- gcc/dwarf2out.c.jj	2008-08-21 10:19:49.000000000 +0200
++++ gcc/dwarf2out.c	2008-08-21 13:15:41.000000000 +0200
+@@ -3910,7 +3910,7 @@ static void dwarf2out_end_block (unsigne
+ static bool dwarf2out_ignore_block (const_tree);
+ static void dwarf2out_global_decl (tree);
+ static void dwarf2out_type_decl (tree, int);
+-static void dwarf2out_imported_module_or_decl (tree, tree);
++static void dwarf2out_imported_module_or_decl (tree, tree, tree, bool);
+ static void dwarf2out_abstract_function (tree);
+ static void dwarf2out_var_location (rtx);
+ static void dwarf2out_begin_function (tree);
+@@ -4541,7 +4541,7 @@ static void gen_decl_die (tree, dw_die_r
+ static dw_die_ref force_decl_die (tree);
+ static dw_die_ref force_type_die (tree);
+ static dw_die_ref setup_namespace_context (tree, dw_die_ref);
+-static void declare_in_namespace (tree, dw_die_ref);
++static dw_die_ref declare_in_namespace (tree, dw_die_ref);
+ static struct dwarf_file_data * lookup_filename (const char *);
+ static void retry_incomplete_types (void);
+ static void gen_type_die_for_member (tree, tree, dw_die_ref);
+@@ -6621,7 +6621,8 @@ is_symbol_die (dw_die_ref c)
+   return (is_type_die (c)
+ 	  || (get_AT (c, DW_AT_declaration)
+ 	      && !get_AT (c, DW_AT_specification))
+-	  || c->die_tag == DW_TAG_namespace);
++	  || c->die_tag == DW_TAG_namespace
++	  || c->die_tag == DW_TAG_module);
+ }
+ 
+ static char *
+@@ -12898,29 +12899,49 @@ gen_variable_die (tree decl, dw_die_ref 
+   com_decl = fortran_common (decl, &off);
+ 
+   /* Symbol in common gets emitted as a child of the common block, in the form
+-     of a data member.
+-
+-     ??? This creates a new common block die for every common block symbol.
+-     Better to share same common block die for all symbols in that block.  */
++     of a data member.  */
+   if (com_decl)
+     {
+       tree field;
+       dw_die_ref com_die;
+-      const char *cnam = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl));
+-      dw_loc_descr_ref loc = loc_descriptor_from_tree (com_decl);
+ 
++      if (lookup_decl_die (decl))
++	return;
+       field = TREE_OPERAND (DECL_VALUE_EXPR (decl), 0);
+-      var_die = new_die (DW_TAG_common_block, context_die, decl);
+-      add_name_and_src_coords_attributes (var_die, field);
+-      add_AT_flag (var_die, DW_AT_external, 1);
+-      add_AT_loc (var_die, DW_AT_location, loc);
++      var_die = lookup_decl_die (com_decl);
++      if (var_die == NULL)
++	{
++	  const char *cnam
++	    = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (com_decl));
++	  dw_loc_descr_ref loc = loc_descriptor_from_tree (com_decl);
++
++	  var_die = new_die (DW_TAG_common_block, context_die, decl);
++	  add_name_and_src_coords_attributes (var_die, com_decl);
++	  add_AT_flag (var_die, DW_AT_external, 1);
++	  if (loc)
++	    add_AT_loc (var_die, DW_AT_location, loc);
++          else if (DECL_EXTERNAL (decl))
++	    add_AT_flag (var_die, DW_AT_declaration, 1);
++	  add_pubname_string (cnam, var_die); /* ??? needed? */
++	  equate_decl_number_to_die (com_decl, var_die);
++	}
++      else if (get_AT (var_die, DW_AT_location) == NULL)
++	{
++	  dw_loc_descr_ref loc = loc_descriptor_from_tree (com_decl);
++
++	  if (loc)
++	    {
++	      add_AT_loc (var_die, DW_AT_location, loc);
++	      remove_AT (var_die, DW_AT_declaration);
++	    }
++	}
+       com_die = new_die (DW_TAG_member, var_die, decl);
+       add_name_and_src_coords_attributes (com_die, decl);
+       add_type_attribute (com_die, TREE_TYPE (decl), TREE_READONLY (decl),
+ 			  TREE_THIS_VOLATILE (decl), context_die);
+       add_AT_loc (com_die, DW_AT_data_member_location,
+ 		  int_loc_descriptor (off));
+-      add_pubname_string (cnam, var_die); /* ??? needed? */
++      equate_decl_number_to_die (decl, com_die);
+       return;
+     }
+ 
+@@ -13685,7 +13706,7 @@ gen_type_die_with_usage (tree type, dw_d
+ 	}
+       else
+ 	{
+-	  declare_in_namespace (type, context_die);
++	  context_die = declare_in_namespace (type, context_die);
+ 	  need_pop = 0;
+ 	}
+ 
+@@ -14057,29 +14078,32 @@ setup_namespace_context (tree thing, dw_
+    For compatibility with older debuggers, namespace DIEs only contain
+    declarations; all definitions are emitted at CU scope.  */
+ 
+-static void
++static dw_die_ref
+ declare_in_namespace (tree thing, dw_die_ref context_die)
+ {
+   dw_die_ref ns_context;
+ 
+   if (debug_info_level <= DINFO_LEVEL_TERSE)
+-    return;
++    return context_die;
+ 
+   /* If this decl is from an inlined function, then don't try to emit it in its
+      namespace, as we will get confused.  It would have already been emitted
+      when the abstract instance of the inline function was emitted anyways.  */
+   if (DECL_P (thing) && DECL_ABSTRACT_ORIGIN (thing))
+-    return;
++    return context_die;
+ 
+   ns_context = setup_namespace_context (thing, context_die);
+ 
+   if (ns_context != context_die)
+     {
++      if (is_fortran ())
++	return ns_context;
+       if (DECL_P (thing))
+ 	gen_decl_die (thing, ns_context);
+       else
+ 	gen_type_die (thing, ns_context);
+     }
++  return context_die;
+ }
+ 
+ /* Generate a DIE for a namespace or namespace alias.  */
+@@ -14095,8 +14119,11 @@ gen_namespace_die (tree decl)
+     {
+       /* Output a real namespace.  */
+       dw_die_ref namespace_die
+-	= new_die (DW_TAG_namespace, context_die, decl);
++	= new_die (is_fortran () ? DW_TAG_module : DW_TAG_namespace,
++		   context_die, decl);
+       add_name_and_src_coords_attributes (namespace_die, decl);
++      if (DECL_EXTERNAL (decl))
++	add_AT_flag (namespace_die, DW_AT_declaration, 1);
+       equate_decl_number_to_die (decl, namespace_die);
+     }
+   else
+@@ -14186,7 +14213,7 @@ gen_decl_die (tree decl, dw_die_ref cont
+ 	    gen_type_die_for_member (origin, decl, context_die);
+ 
+ 	  /* And its containing namespace.  */
+-	  declare_in_namespace (decl, context_die);
++	  context_die = declare_in_namespace (decl, context_die);
+ 	}
+ 
+       /* Now output a DIE to represent the function itself.  */
+@@ -14231,16 +14258,6 @@ gen_decl_die (tree decl, dw_die_ref cont
+       if (debug_info_level <= DINFO_LEVEL_TERSE)
+ 	break;
+ 
+-      /* If this is the global definition of the Fortran COMMON block, we don't
+-         need to do anything.  Syntactically, the block itself has no identity,
+-         just its constituent identifiers.  */
+-      if (TREE_CODE (decl) == VAR_DECL
+-          && TREE_PUBLIC (decl)
+-          && TREE_STATIC (decl)
+-          && is_fortran ()
+-          && !DECL_HAS_VALUE_EXPR_P (decl))
+-        break;
+-
+       /* Output any DIEs that are needed to specify the type of this data
+ 	 object.  */
+       if (TREE_CODE (decl) == RESULT_DECL && DECL_BY_REFERENCE (decl))
+@@ -14254,7 +14271,7 @@ gen_decl_die (tree decl, dw_die_ref cont
+ 	gen_type_die_for_member (origin, decl, context_die);
+ 
+       /* And its containing namespace.  */
+-      declare_in_namespace (decl, context_die);
++      context_die = declare_in_namespace (decl, context_die);
+ 
+       /* Now output the DIE to represent the data object itself.  This gets
+ 	 complicated because of the possibility that the VAR_DECL really
+@@ -14307,15 +14324,7 @@ dwarf2out_global_decl (tree decl)
+   /* Output DWARF2 information for file-scope tentative data object
+      declarations, file-scope (extern) function declarations (which had no
+      corresponding body) and file-scope tagged type declarations and
+-     definitions which have not yet been forced out.
+-
+-     Ignore the global decl of any Fortran COMMON blocks which also wind up here
+-     though they have already been described in the local scope for the 
+-     procedures using them.  */
+-  if (TREE_CODE (decl) == VAR_DECL
+-      && TREE_PUBLIC (decl) && TREE_STATIC (decl) && is_fortran ())
+-    return;
+-
++     definitions which have not yet been forced out.  */
+   if (TREE_CODE (decl) != FUNCTION_DECL || !DECL_INITIAL (decl))
+     dwarf2out_decl (decl);
+ }
+@@ -14329,10 +14338,14 @@ dwarf2out_type_decl (tree decl, int loca
+     dwarf2out_decl (decl);
+ }
+ 
+-/* Output debug information for imported module or decl.  */
++/* Output debug information for imported module or decl DECL.
++   NAME is non-NULL name in context if the decl has been renamed.
++   CHILD is true if decl is one of the renamed decls as part of
++   importing whole module.  */
+ 
+ static void
+-dwarf2out_imported_module_or_decl (tree decl, tree context)
++dwarf2out_imported_module_or_decl (tree decl, tree name, tree context,
++				   bool child)
+ {
+   dw_die_ref imported_die, at_import_die;
+   dw_die_ref scope_die;
+@@ -14355,6 +14368,14 @@ dwarf2out_imported_module_or_decl (tree 
+     return;
+   scope_die = get_context_die (context);
+ 
++  if (child)
++    {
++      gcc_assert (scope_die->die_child);
++      gcc_assert (scope_die->die_child->die_tag == DW_TAG_imported_module);
++      gcc_assert (TREE_CODE (decl) != NAMESPACE_DECL);
++      scope_die = scope_die->die_child;
++    }
++
+   /* For TYPE_DECL or CONST_DECL, lookup TREE_TYPE.  */
+   if (TREE_CODE (decl) == TYPE_DECL || TREE_CODE (decl) == CONST_DECL)
+     {
+@@ -14405,6 +14426,8 @@ dwarf2out_imported_module_or_decl (tree 
+   xloc = expand_location (input_location);
+   add_AT_file (imported_die, DW_AT_decl_file, lookup_filename (xloc.file));
+   add_AT_unsigned (imported_die, DW_AT_decl_line, xloc.line);
++  if (name)
++    add_AT_string (imported_die, DW_AT_name, IDENTIFIER_POINTER (name));
+   add_AT_die_ref (imported_die, DW_AT_import, at_import_die);
+ }
+ 
+--- gcc/sdbout.c.jj	2008-08-21 10:19:49.000000000 +0200
++++ gcc/sdbout.c	2008-08-21 10:21:30.000000000 +0200
+@@ -329,7 +329,7 @@ const struct gcc_debug_hooks sdb_debug_h
+   debug_nothing_tree,		         /* function_decl */
+   sdbout_global_decl,		         /* global_decl */
+   sdbout_symbol,			 /* type_decl */
+-  debug_nothing_tree_tree,               /* imported_module_or_decl */
++  debug_nothing_tree_tree_tree_bool,	 /* imported_module_or_decl */
+   debug_nothing_tree,		         /* deferred_inline_function */
+   debug_nothing_tree,		         /* outlining_inline_function */
+   sdbout_label,			         /* label */

             reply	other threads:[~2026-06-29 12:23 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-29 12:23 Jakub Jelinek [this message]
  -- strict thread matches above, loose matches on Subject: below --
2026-06-29 12:23 [rpms/gcc] rhel-f41-base: 4.3.1-8 Jakub Jelinek
2026-06-29 12:23 Jakub Jelinek

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=178273583281.1.1700724365360721044.rpms-gcc-dc4fc4efbaa7@fedoraproject.org \
    --to=jakub@fedoraproject.org \
    --cc=git-commits@fedoraproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox