Skip to content
Snippets Groups Projects
Commit 551aa757 authored by Richard Biener's avatar Richard Biener
Browse files

Add CLOBBER_EOL to mark storage end-of-life clobbers

This adds a flag to CONSTRUCTOR nodes indicating that for
clobbers this marks the end-of-life of storage as opposed to
just ending the lifetime of the object that occupied it.
The dangling pointer diagnostics uses CLOBBERs but is confused
by those emitted by the C++ frontend for example which emits
them for the second purpose at the start of CTORs.  The issue
is also appearant for aarch64 in PR104092.

Distinguishing the two cases is also necessary for the PR90348 fix.

Since I'm going to add another flag I added an enum clobber_flags
and a defaulted argument to build_clobber plus a convenient way to
query the enum from the CTOR tree and specify it for gimple_clobber_p.
Since 'CLOBBER' is already taken and I needed a name for the unspecified
clobber we have now I used 'CLOBBER_UNDEF'.

2022-02-03  Richard Biener  <rguenther@suse.de>

	PR middle-end/90348
	PR middle-end/104092
gcc/
	* tree-core.h (clobber_kind): New enum.
	(tree_base::u::bits::address_space): Document use in CONSTRUCTORs.
	* tree.h (CLOBBER_KIND): Add.
	(build_clobber): Add clobber kind argument, defaulted to
	CLOBBER_UNDEF.
	* tree.cc (build_clobber): Likewise.
	* gimple.h (gimple_clobber_p): New overload with specified kind.
	* tree-streamer-in.cc (streamer_read_tree_bitfields): Stream
	CLOBBER_KIND.
	* tree-streamer-out.cc (streamer_write_tree_bitfields):
	Likewise.
	* tree-pretty-print.cc (dump_generic_node): Mark EOL CLOBBERs.
	* gimplify.cc (gimplify_bind_expr): Build storage end-of-life clobbers
	with CLOBBER_EOL.
	(gimplify_target_expr): Likewise.
	* tree-inline.cc (expand_call_inline): Likewise.
	* tree-ssa-ccp.cc (insert_clobber_before_stack_restore): Likewise.
	* gimple-ssa-warn-access.cc (pass_waccess::check_stmt): Only treat
	CLOBBER_EOL clobbers as ending lifetime of storage.

gcc/lto/
	* lto-common.cc (compare_tree_sccs_1): Compare CLOBBER_KIND.

gcc/testsuite/
	* gcc.dg/pr87052.c: Adjust.
parent e78d98f7
No related branches found
No related tags found
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment