This is the mail archive of the
mailing list for the GCC project.
Re: Should invalid __RTL testcase "startwith" passes emit a warning?
- From: Richard Biener <richard dot guenther at gmail dot com>
- To: Matthew Malcomson <Matthew dot Malcomson at arm dot com>
- Cc: "gcc at gcc dot gnu dot org" <gcc at gcc dot gnu dot org>, nd <nd at arm dot com>
- Date: Wed, 20 Feb 2019 09:35:28 +0100
- Subject: Re: Should invalid __RTL testcase "startwith" passes emit a warning?
- References: <firstname.lastname@example.org>
On Tue, Feb 19, 2019 at 3:29 PM Matthew Malcomson
> Hi there,
> I'd like to make handling of the __RTL function testcases where the
> startwith pass name is either invalid, not used for that optimisation
> level, or non-existant more understandable.
> Currently a problem with the pass name leaves around state that causes
> the compiler to ICE on other functions.
> If the pass name is invalid or one not used for the current optimisation
> level then "dfinit" is run, but "dfinish" is not, which breaks an
> assertion in the `rest_of_handle_df_finish` function.
> For any of the problems the "*clean_state" pass is not run, which causes
> an ICE on the first C function in the TU.
> The ICE's I've seen can be avoided by always running the "*clean_state"
> pass (including if the startwith pass of the function is not specified)
> and by always running the "dfinish" pass if the "dfinit" pass is run and
> I am working on a patch to do this.
> Since the function will not emit any code for any of these problems, I
> was wondering whether to emit a -Wunused-function warning pointing to
> the bad name (or to the area where a name should be), since it's
> unlikely to be intended.
> The current behaviour (apart from causing an ICE on other functions) is
> to silently do nothing.
You are supposed to write correct __RTL (or __GIMPLE).
Possibly clearing bad state to not leak to other functions might be a
good idea though.
> Example for "ICE after a bad name".
> foo_a ()
> return 200;
> int __RTL (startwith ("badname")) foo2 ()
> (function "foo2"
> (block 2
> (edge-from entry (flags "FALLTHRU"))
> (cnote 3 [bb 2] NOTE_INSN_BASIC_BLOCK)
> (cinsn 101 (set (reg:DI x19) (reg:DI x0)))
> (cinsn 10 (use (reg/i:SI x19)))
> (edge-to exit (flags "FALLTHRU"))
> ) ;; block 2
> ) ;; insn-chain
> ) ;; function "foo2"