From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2784 invoked by alias); 22 Nov 2004 10:42:37 -0000 Mailing-List: contact gcc-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-owner@gcc.gnu.org Received: (qmail 2603 invoked from network); 22 Nov 2004 10:42:19 -0000 Received: from unknown (HELO Cantor.suse.de) (195.135.220.2) by sourceware.org with SMTP; 22 Nov 2004 10:42:19 -0000 Received: from hermes.suse.de (hermes-ext.suse.de [195.135.221.8]) (using TLSv1 with cipher EDH-RSA-DES-CBC3-SHA (168/168 bits)) (No client certificate requested) by Cantor.suse.de (Postfix) with ESMTP id 8CC51114BC5B; Mon, 22 Nov 2004 11:42:15 +0100 (CET) To: Jamie Lokier Cc: gcc@gcc.gnu.org Subject: Re: Documentation bug for __builtin_choose_expr References: <20041122042652.GA26998@mail.shareable.org> From: Andreas Schwab X-Yow: Boy, am I glad it's only 1971... Date: Mon, 22 Nov 2004 12:21:00 -0000 In-Reply-To: <20041122042652.GA26998@mail.shareable.org> (Jamie Lokier's message of "Mon, 22 Nov 2004 04:26:52 +0000") Message-ID: User-Agent: Gnus/5.110002 (No Gnus v0.2) Emacs/21.3.50 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit X-SW-Source: 2004-11/txt/msg00740.txt.bz2 Jamie Lokier writes: > The documentation for __builtin_choose_expr says: > > -- Built-in Function: TYPE __builtin_choose_expr (CONST_EXP, EXP1, EXP2) > You can use the built-in function `__builtin_choose_expr' to > evaluate code depending on the value of a constant expression. > This built-in function returns EXP1 if CONST_EXP, which is a > constant expression that must be able to be determined at compile > time, is nonzero. Otherwise it returns 0. > > This built-in function is analogous to the `? :' operator in C, > except that the expression returned has its type unaltered by > promotion rules. Also, the built-in function does not evaluate > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > the expression that was not chosen. For example, if CONST_EXP > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > evaluates to true, EXP2 is not evaluated even if it has > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > side-effects. > ^^^^^^^^^^^^^ > > The way this is written implies that the underscored behaviour is > different from the `? :' operator in C. I don't see that. For me the word "also" implies "another analogousness". IMHO this is fact is worth noting because the usual rules for function calls in C is to evaluate all its arguments first, whereas this builtin does not do that even though it uses a function-like notation. Andreas. -- Andreas Schwab, SuSE Labs, schwab@suse.de SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different."