diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2022-06-13 10:03:36 +0200 |
---|---|---|
committer | Eric Botcazou <ebotcazou@adacore.com> | 2022-06-13 13:35:33 +0200 |
commit | cb1ecf3819f19a4fc35468010b66b5c1a7b21ee8 (patch) | |
tree | 82d4d3db3c65eb4cf3e013d3b0d6072945a170ec | |
parent | 6303eee4b92e8509409503a3abebde8bd50f0f05 (diff) | |
download | gcc-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++.
-rw-r--r-- | gcc/dwarf2out.cc | 2 | ||||
-rw-r--r-- | gcc/gimple.h | 3 | ||||
-rw-r--r-- | gcc/optabs.cc | 6 | ||||
-rw-r--r-- | gcc/testsuite/c-c++-common/nonnull-1.c | 2 |
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" } */ } |