From owner-freebsd-stable Sun Sep 24 9: 0:42 2000 Delivered-To: freebsd-stable@freebsd.org Received: from earth.backplane.com (placeholder-dcat-1076843290.broadbandoffice.net [64.47.83.26]) by hub.freebsd.org (Postfix) with ESMTP id 9064537B422 for ; Sun, 24 Sep 2000 09:00:40 -0700 (PDT) Received: (from dillon@localhost) by earth.backplane.com (8.11.0/8.9.3) id e8OG0VF76919; Sun, 24 Sep 2000 09:00:31 -0700 (PDT) (envelope-from dillon) Date: Sun, 24 Sep 2000 09:00:31 -0700 (PDT) From: Matt Dillon Message-Id: <200009241600.e8OG0VF76919@earth.backplane.com> To: Warner Losh Cc: BSD , Michael Allman , stable@FreeBSD.ORG Subject: Re: Constant panics on 4.1-STABLE! References: <200009241546.e8OFkHG01180@billy-club.village.org> Sender: owner-freebsd-stable@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG :: > 132 /* :: > 133 * Look up the address in the table for that Address Family :: > 134 */ :: > 135 if (rnh && (rn = rnh->rnh_matchaddr((caddr_t)dst, rnh)) && :: > 136 ((rn->rn_flags & RNF_ROOT) == 0)) { :: :: C doesn't guarantee order of execution in if ( bleh && bleh && :: bleh). It may very well evaluate it backwards, or from the inside out if :: it wants. No? : :No. That's not right. It evaluates left to right. rnh is checked :for null, then matchaddr is called and then rn->rn_flags is checked. : :Warner Yah. C definitely guarentees the order of execution for && and ||. The moment a clause fails for an &&, the rest of the expression is skipped. The moment a clause succeeds for an ||, the rest of the expression is skipped. -Matt To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-stable" in the body of the message