Date: Sun, 24 Sep 2000 09:00:31 -0700 (PDT) From: Matt Dillon <dillon@earth.backplane.com> To: Warner Losh <imp@village.org> Cc: BSD <bsd@shell-server.com>, Michael Allman <msa@dinosauricon.com>, stable@FreeBSD.ORG Subject: Re: Constant panics on 4.1-STABLE! Message-ID: <200009241600.e8OG0VF76919@earth.backplane.com> References: <Pine.BSF.4.10.10009232316590.62035-100000@marvin.shell-server.com> <200009241546.e8OFkHG01180@billy-club.village.org>
next in thread | previous in thread | raw e-mail | index | archive | help
:: > 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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200009241600.e8OG0VF76919>
