The following reply was made to PR optimization/10339; it has been noted by GNATS. From: Andreas Schwab To: Michael Ubell Cc: Timothy C Prince , falk.hueffner@student.uni-tuebingen.de, bangerth@ices.utexas.edu, gcc-bugs@gcc.gnu.org, gcc-gnats@gcc.gnu.org Subject: Re: c/10339: strncmp generates imPure code Date: Mon, 07 Apr 2003 23:38:18 +0200 Michael Ubell writes: |> Andreas Schwab wrote: |> > Michael Ubell writes: |> > |> Attached is a program that reads 831 unaligned unallocated |> > |> bytes. I can't actually get it to segv on Solaris because |> > |> I don't know enough about their memory management, but |> > |> I cannot believe this is correct code. |> > Yes, you are right, I can reproduce that also on ia64-linux. The |> > conversion to memcmp is really invalid here. |> > Andreas. |> > |> |> Now I get to argue the other side :-) Was your string properly null |> terminated? If not, then its not the compiler's fault. I think |> memcmp is valid so long as the strings are well formed. This will |> be true because C strings may not contain embedded nulls. memcmp does not operate on strings, but on arrays of characters. That's an important difference, because memcmp is allowed, eg, to start comparing from the upper end of the arrays, independent of the actual contents of them; there is no null termination involved here. On the other hand strncmp must not look behind the first nul character (at least conceptionally, the actual implementation may do so anyway if it can determine that it is safe). Andreas. -- Andreas Schwab, SuSE Labs, schwab@suse.de SuSE Linux AG, Deutschherrnstr. 15-19, D-90429 Nürnberg Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different."