From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 4876 invoked by alias); 7 Apr 2003 21:46:04 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 4835 invoked by uid 71); 7 Apr 2003 21:46:01 -0000 Date: Mon, 07 Apr 2003 21:46:00 -0000 Message-ID: <20030407214601.4834.qmail@sources.redhat.com> To: nobody@gcc.gnu.org Cc: gcc-prs@gcc.gnu.org, From: Andreas Schwab Subject: Re: c/10339: strncmp generates imPure code Reply-To: Andreas Schwab X-SW-Source: 2003-04/txt/msg00316.txt.bz2 List-Id: 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."