aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2022-06-13 10:03:36 +0200
committerEric Botcazou <ebotcazou@adacore.com>2022-06-13 13:35:33 +0200
commitcb1ecf3819f19a4fc35468010b66b5c1a7b21ee8 (patch)
tree82d4d3db3c65eb4cf3e013d3b0d6072945a170ec /gcc
parent6303eee4b92e8509409503a3abebde8bd50f0f05 (diff)
downloadgcc-cb1ecf3819f19a4fc35468010b66b5c1a7b21ee8.zip
gcc-cb1ecf3819f19a4fc35468010b66b5c1a7b21ee8.tar.gz
gcc-cb1ecf3819f19a4fc35468010b66b5c1a7b21ee8.tar.bz2
Do not erase warning data in gimple_set_location
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++.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/dwarf2out.cc2
-rw-r--r--gcc/gimple.h3
-rw-r--r--gcc/optabs.cc6
-rw-r--r--gcc/testsuite/c-c++-common/nonnull-1.c2
4 files changed, 6 insertions, 7 deletions
diff --git a/gcc/dwarf2out.cc b/gcc/dwarf2out.cc
index 29f32ec..b468a4b 100644
--- a/gcc/dwarf2out.cc
+++ b/gcc/dwarf2out.cc
@@ -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;
diff --git a/gcc/gimple.h b/gcc/gimple.h
index 6b1e89a..870629c 100644
--- a/gcc/gimple.h
+++ b/gcc/gimple.h
@@ -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;
}
diff --git a/gcc/optabs.cc b/gcc/optabs.cc
index c0a6847..a50dd79 100644
--- a/gcc/optabs.cc
+++ b/gcc/optabs.cc
@@ -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
diff --git a/gcc/testsuite/c-c++-common/nonnull-1.c b/gcc/testsuite/c-c++-common/nonnull-1.c
index ea98736..7be4e34 100644
--- a/gcc/testsuite/c-c++-common/nonnull-1.c
+++ b/gcc/testsuite/c-c++-common/nonnull-1.c
@@ -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" } */
}