[ros-dev] gcc problem or not

Waldo Alvarez Cañizares wac at lab.matcom.uh.cu
Wed May 4 10:13:27 CEST 2005


Hi:
 
I doubt this could be a bug. A lot of code would break with it. Maybe it does violates the short circuit in the small number of cases where that can be done. As in this case, it doesn't matters.
 
Regards
Waldo

________________________________

From: ros-dev-bounces at reactos.com on behalf of Hartmut Birr
Sent: Tue 5/3/2005 2:43 PM
To: ReactOS Development List
Subject: [ros-dev] gcc problem or not



Hi,

I've looked on a map file from an optimized build. I found the following
code:

  /*
   * If the directory containing the file to open doesn't exist then
   * fail immediately
   */
  if (Status == STATUS_OBJECT_PATH_NOT_FOUND ||
   12015:    83 c4 0c                 add    $0xc,%esp
   12018:    89 c3                    mov    %eax,%ebx
   1201a:    3d 3a 00 00 c0           cmp    $0xc000003a,%eax
   1201f:    0f 94 c2                 sete   %dl
   12022:    3d 0d 00 00 c0           cmp    $0xc000000d,%eax
   12027:    0f 94 c0                 sete   %al
   1202a:    09 d0                    or     %edx,%eax
   1202c:    a8 01                    test   $0x1,%al
   1202e:    0f 85 42 01 00 00        jne    12176 <_VfatCreateFile+0x2e9>
   12034:    81 fb 56 00 00 c0        cmp    $0xc0000056,%ebx
   1203a:    0f 84 36 01 00 00        je     12176 <_VfatCreateFile+0x2e9>
      Status == STATUS_INVALID_PARAMETER ||
      Status == STATUS_DELETE_PENDING)
    {
      if (ParentFcb)
      {
         vfatReleaseFCB (DeviceExt, ParentFcb);
      }
      return(Status);
    }

I was always the opinion  that the examination of a test condition stops
if the result can not change again. A test condition like this:

if (pointer == NULL || pointer->member == 0)

should never access pointer->member if pointer is zero. Compared with
the code above, it is possible that gcc build the result from the right
side of the OR statement. This may hit a page fault. Is this a bug in gcc?

- Hartmut

_______________________________________________
Ros-dev mailing list
Ros-dev at reactos.com
http://reactos.com:8080/mailman/listinfo/ros-dev


-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/ms-tnef
Size: 6689 bytes
Desc: not available
Url : http://reactos.com:8080/pipermail/ros-dev/attachments/20050504/6c59e104/attachment.bin


More information about the Ros-dev mailing list