This is the mail archive of the
mailing list for the GCC project.
Re: Handling non-constant bounds in extract_range_from_cond
- From: kenner at vlsi1 dot ultra dot nyu dot edu (Richard Kenner)
- To: laurent at guerby dot net
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Mon, 29 Nov 04 17:52:36 EST
- Subject: Re: Handling non-constant bounds in extract_range_from_cond
But the whole point of 'Valid is to have a way to tell the compiler to
forget about these optimizations, so performance isn't really
I wasn't making performance as an argument, but I still think it's overkill
to invent some mechanism to tell the optimizer not to optimize something just
for this case.
X in Foo can be optimized at will, just as X <= B, etc...
X'Valid shoud not, that's the usefullness of this construct.
Although technically speaking, you're right, and generally more Ada
programmers read the standard than C programmers, it may still be unfriendly
to do this. Robert just opened an internal bug report at ACT early yesterday
afternoon suggesting it would be "friendlier" to convert "X in Foo" to
X'Valid in the above case.
And the motivation was a bug report from a programmer at one of the largest
defense contractors who said, in part, "Moreover, the Text_IO statements I
added to Restore_Daemon_Data_From_Restart (see output file out.txt) show
surprising behavior: Port_Number'First and 'Last are 7300 and 11000 as
expected, but my if-tests on lines 126 and 132 that should raise
Obsolete_File do not do so."
Those tests are "if Element.Port_Number not in Port_Number_Type" and
if Element.Port_Number < Port_Number_Type'First
or Element.Port_Number > Port_Number_Type'Last
So my feeling is that standing to the letter of the language standard
here is actively unhelpful given that legitimate opportunities to
apply this optimization are few and far between.