]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Do not erase warning data in gimple_set_location
authorEric Botcazou <ebotcazou@adacore.com>
Mon, 13 Jun 2022 08:03:36 +0000 (10:03 +0200)
committerEric Botcazou <ebotcazou@adacore.com>
Mon, 13 Jun 2022 11:35:33 +0000 (13:35 +0200)
gimple_set_location is mostly invoked on newly built GIMPLE statements, so
their location is UNKNOWN_LOCATION and setting it will clobber the warning
data of the passed location, if any.

gcc/
* dwarf2out.cc (output_one_line_info_table): Initialize prev_addr.
* gimple.h (gimple_set_location): Do not copy warning data from
the previous location when it is UNKNOWN_LOCATION.
* optabs.cc (expand_widen_pattern_expr): Always set oprnd{1,2}.
gcc/testsuite/
* c-c++-common/nonnull-1.c: Remove XFAIL for C++.

gcc/dwarf2out.cc
gcc/gimple.h
gcc/optabs.cc
gcc/testsuite/c-c++-common/nonnull-1.c

index 29f32ec69399c0d9d537bbdf366e40bac0ce99fc..b468a4b9c0fa16f03bbed1ed1e4d6da04e198627 100644 (file)
@@ -12916,7 +12916,7 @@ output_one_line_info_table (dw_line_info_table *table)
   char line_label[MAX_ARTIFICIAL_LABEL_BYTES];
   unsigned int current_line = 1;
   bool current_is_stmt = DWARF_LINE_DEFAULT_IS_STMT_START;
-  dw_line_info_entry *ent, *prev_addr;
+  dw_line_info_entry *ent, *prev_addr = NULL;
   size_t i;
   unsigned int view;
 
index 6b1e89ad74e6b22dd534ff48e48fef688032f844..870629cd56272f3b30cd97490a292d231148d3ce 100644 (file)
@@ -1913,7 +1913,8 @@ static inline void
 gimple_set_location (gimple *g, location_t location)
 {
   /* Copy the no-warning data to the statement location.  */
-  copy_warning (location, g->location);
+  if (g->location != UNKNOWN_LOCATION)
+    copy_warning (location, g->location);
   g->location = location;
 }
 
index c0a68471d2ddf08bc0e6a3fd592ebb9f05e516c1..a50dd798f2a454ac54e247f3e6cbab17577ea304 100644 (file)
@@ -264,10 +264,8 @@ expand_widen_pattern_expr (sepops ops, rtx op0, rtx op1, rtx wide_op,
   bool sbool = false;
 
   oprnd0 = ops->op0;
-  if (nops >= 2)
-    oprnd1 = ops->op1;
-  if (nops >= 3)
-    oprnd2 = ops->op2;
+  oprnd1 = nops >= 2 ? ops->op1 : NULL_TREE;
+  oprnd2 = nops >= 3 ? ops->op2 : NULL_TREE;
 
   tmode0 = TYPE_MODE (TREE_TYPE (oprnd0));
   if (ops->code == VEC_UNPACK_FIX_TRUNC_HI_EXPR
index ea987365302eed66fd024ff3ab1984d10c1acb86..7be4e3479ddee20a85af264d329da7b5c8caea60 100644 (file)
@@ -30,5 +30,5 @@ func (char *cp1, char *cp2, char *cp3, char *cp4)
 __attribute__((nonnull (1))) int
 func2 (char *cp)
 {
-  return (cp != NULL) ? 1 : 0; /* { dg-warning "'nonnull' argument" "cp compared to NULL" { xfail c++ } } */
+  return (cp != NULL) ? 1 : 0; /* { dg-warning "'nonnull' argument" "cp compared to NULL" } */
 }