From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6679 invoked by alias); 10 Nov 2011 02:45:48 -0000 Received: (qmail 6666 invoked by uid 22791); 10 Nov 2011 02:45:47 -0000 X-SWARE-Spam-Status: No, hits=-2.9 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from localhost (HELO gcc.gnu.org) (127.0.0.1) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 10 Nov 2011 02:45:34 +0000 From: "joel at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug fortran/51073] New: _gfortran_caf_register incorrectly assumes malloc(0) returns non-NULL Date: Thu, 10 Nov 2011 07:39:00 -0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: new X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: fortran X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: joel at gcc dot gnu.org X-Bugzilla-Status: UNCONFIRMED X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org X-Bugzilla-Target-Milestone: --- X-Bugzilla-Changed-Fields: Message-ID: X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated Content-Type: text/plain; charset="UTF-8" MIME-Version: 1.0 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2011-11/txt/msg01045.txt.bz2 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51073 Bug #: 51073 Summary: _gfortran_caf_register incorrectly assumes malloc(0) returns non-NULL Classification: Unclassified Product: gcc Version: 4.7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran AssignedTo: unassigned@gcc.gnu.org ReportedBy: joel@gcc.gnu.org Revision: Wed Nov 9 13:24:05 UTC 2011 (revision 181203) Target: mips-rtems4.11 but impacts all where malloc(0) returns NULL I am debugging why some of the gfortran tests are failing. I have tracked NN failures down to this code in caf/mpi.c around line 155. /* Token contains only a list of pointers. */ local = malloc (size); token = malloc (sizeof (void*) * caf_num_images); if (unlikely (local == NULL || token == NULL)) goto error; >>From http://pubs.opengroup.org/onlinepubs/009695399/functions/malloc.html Upon successful completion with size not equal to 0, malloc() shall return a pointer to the allocated space. If size is 0, either a null pointer or a unique pointer that can be successfully passed to free() shall be returned. Otherwise, it shall return a null pointer [CX] and set errno to indicate the error. The code uses the memory pointed to by local to pass to MPI_Allgather() and then returns it to the caller. I suspect that the line "local = malloc (size)" should be something like: local = malloc ((size == 0)? sizeof(XXX) : size); Where XXX needs to be the type of one entity of sufficient size to pass into MPI_Allgather.