Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.compilers > #1756

Re: dead code or otherwise, was Alternative C compilers on x86_64 Linux?

From George Neuner <gneuner2@comcast.net>
Newsgroups comp.compilers
Subject Re: dead code or otherwise, was Alternative C compilers on x86_64 Linux?
Date 2016-09-09 00:51 -0400
Organization A noiseless patient Spider
Message-ID <16-09-017@comp.compilers> (permalink)
References (1 earlier) <16-09-005@comp.compilers> <16-09-009@comp.compilers> <16-09-012@comp.compilers> <16-09-015@comp.compilers> <16-09-016@comp.compilers>

Show all headers | View raw


On Thu, 8 Sep 2016 22:54:13 +0000 (UTC), Kaz Kylheku <221-501-9011@kylheku.com> wrote:

>On 2016-09-08, George Neuner <gneuner2@comcast.net> wrote:
>> On Tue, 6 Sep 2016 21:35:30 +0100, BartC <bc@freeuk.com> wrote:
>>
>>>On 06/09/2016 03:15, Kaz Kylheku wrote:
>>>
>>>> A duplicate condition in an if-else chain is unreachable code, which is
>>>> probably a bug.
>>>>
>>>>    if (foo) {
>>>>      ...
>>>>    } else if (foo) {
>>>>      /* unreachable */
>>>>    } else if (bar) {
>>>>      ...
>>>>    }
>>>
>>>It's not necessarily unreachable. For example:
>>>
>>>  if (foo()) { ...}
>>>  elsif if (foo()) { ... }
>>>
>>>foo() could return false the first time and true the second time.
>>
>> In such cases foo doesn't need to be function - it only needs to be a
>> [moral equivalent of a C] volatile to exhibit strange behavior.
>
>Two occurrences of an impure expression aren't the same condition.

That certainly is true ... for some definition ... but in the examples
given by Bart and me, the compiler has no basis to distinguish the
occurrences.


>If a compiler wants to rearrange the code so that the result of such
>an expression is to appear in multiple places (where in the original
>source language, the corresponding expression appears just once), it
>must introduce a temporary variable to hold the result, and propagate
>the variable. Otherwise the multiple evaluations will lead to
>unpleasant surprised.
>
>   ;; poor: copies of code fragment (foo) literally proliferated
>
>  (let ((code-fragment '(foo))
>        (temp (gensym)))
>    `(cond (,code-fragment ...)
>           (,code-fragment ...) ;; not same; potentially reachable!
>             ...)))
>
>  ;; correct:
>
>  (let ((code-fragment '(foo))
>        (temp (gensym)))
>    `(let ((,temp ,code-fragment)) ;; eval code fragment to temporary
>       (cond (,temp ...) ;; proliferate temporary
>             (,temp ...) ;; unreachable!
>             ...)))
>

Also true, but irrelevent.  The compiler can't assume semantics not in
evidence.   It's job is to faithfully translate the source as written
... not the source with better hygiene, and not the source as the
compiler thinks the programmer maybe intended.

Leaving aside for the moment what is legal in a C switch, if I tell
the compiler to call foo() multiple times, I expect it to do that.


>Anyway, this was originally about translating C switch statements, where
>the conditions are pure expressions, being integer constants. "else if
>(foo()) ..." is an unlikely translation of a standard C switch case.

But like any good Usenet discussion, it (d)evolved into something more
general.

Not every language with a CASE like construct has C's limitations on
specifying the alternatives.  Lisp certainly doesn't.   And it is
perfectly reasonable to implement the construct using an IF chain.

In fact, many (non-Lisp) compilers do implement CASE like constructs
using chained IF performing a binary search when the set of
alternatives is either sparse enough or large enough to make using a
dispatch table unweildy (or mostly empty).

George

Back to comp.compilers | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Alternative C compilers on x86_64 Linux? arnold@skeeve.com (Aharon Robbins) - 2016-09-02 03:01 +0000
  Re: Alternative C compilers on x86_64 Linux? jacobnavia <jacob@jacob.remcomp.fr> - 2016-09-05 00:20 +0200
    Re: Alternative C compilers on x86_64 Linux? alexfrunews@gmail.com - 2016-09-05 17:26 -0700
      Re: diagnosing C errors, was Alternative C compilers on x86_64 Linux? BartC <bc@freeuk.com> - 2016-09-09 12:31 +0100
        Re: diagnosing C errors, was Alternative C compilers on x86_64 Linux? Kaz Kylheku <221-501-9011@kylheku.com> - 2016-09-09 16:06 +0000
        Re: diagnosing C errors, was Alternative C compilers on x86_64 Linux? Hans-Peter Diettrich <DrDiettrich1@netscape.net> - 2016-09-10 00:38 +0200
  Re: Alternative C compilers on x86_64 Linux? Nemo <nemo@invalid.invalid> - 2016-09-04 18:32 -0400
  Re: Alternative C compilers on x86_64 Linux? Kaz Kylheku <221-501-9011@kylheku.com> - 2016-09-04 23:48 +0000
  Re: Alternative C compilers on x86_64 Linux? BartC <bc@freeuk.com> - 2016-09-05 13:19 +0100
    Re: Alternative C compilers on x86_64 Linux? Kaz Kylheku <221-501-9011@kylheku.com> - 2016-09-06 02:15 +0000
      Re: Alternative C compilers on x86_64 Linux? BartC <bc@freeuk.com> - 2016-09-06 21:35 +0100
        Re: dead code or otherwise, was Alternative C compilers on x86_64 Linux? George Neuner <gneuner2@comcast.net> - 2016-09-08 11:58 -0400
          Re: dead code or otherwise, was Alternative C compilers on x86_64 Linux? Kaz Kylheku <221-501-9011@kylheku.com> - 2016-09-08 22:54 +0000
            Re: dead code or otherwise, was Alternative C compilers on x86_64 Linux? George Neuner <gneuner2@comcast.net> - 2016-09-09 00:51 -0400
              Re: dead code or otherwise, was Alternative C compilers on x86_64 Linux? Kaz Kylheku <221-501-9011@kylheku.com> - 2016-09-09 06:05 +0000
                Re: dead code or otherwise, was Alternative C compilers on x86_64 Linux? George Neuner <gneuner2@comcast.net> - 2016-09-09 14:02 -0400
                Re: dead code or otherwise, was Alternative C compilers on x86_64 Linux? Kaz Kylheku <221-501-9011@kylheku.com> - 2016-09-09 19:57 +0000
      Re: duplicate cases, was Alternative C compilers on x86_64 Linux? Andy Walker <anw@cuboid.co.uk> - 2016-09-07 17:01 +0100
  Re: Alternative C compilers on x86_64 Linux? Florian Weimer <fw@deneb.enyo.de> - 2016-09-05 20:06 +0200
  Re: Alternative C compilers on x86_64 Linux? alexfrunews@gmail.com - 2016-09-05 17:22 -0700
    Re: Alternative C compilers on x86_64 Linux? Kaz Kylheku <221-501-9011@kylheku.com> - 2016-09-06 02:18 +0000
  Re: Alternative C compilers on x86_64 Linux? rockbrentwood@gmail.com - 2016-09-07 17:00 -0700
  Re: Alternative C compilers on x86_64 Linux? arnold@skeeve.com (Aharon Robbins) - 2016-09-12 18:42 +0000
    Re: Alternative C compilers on x86_64 Linux? BartC <bc@freeuk.com> - 2016-09-12 22:37 +0100
      Re: Alternative C compilers on x86_64 Linux? arnold@skeeve.com (Aharon Robbins) - 2016-09-13 17:35 +0000
        Re: Alternative C compilers on x86_64 Linux? arnold@skeeve.com (Aharon Robbins) - 2016-09-14 18:14 +0000
  Re: Alternative C compilers on x86_64 Linux? rugxulo@gmail.com - 2016-09-26 15:29 -0700
    Re: Alternative C compilers on x86_64 Linux? arnold@skeeve.com (Aharon Robbins) - 2016-09-27 05:40 +0000
      Re: Alternative C compilers on x86_64 Linux? rugxulo@gmail.com - 2016-09-27 16:36 -0700
        Re: Alternative C compilers on x86_64 Linux? BartC <bc@freeuk.com> - 2016-09-28 18:16 +0100
          Re: Alternative C compilers on x86_64 Linux? BartC <bc@freeuk.com> - 2016-09-29 14:03 +0100
            Re: Alternative C compilers on x86_64 Linux? George Neuner <gneuner2@comcast.net> - 2016-09-29 22:57 -0400
            Re: Alternative C compilers on x86_64 Linux? Hans-Peter Diettrich <DrDiettrich1@netscape.net> - 2016-09-30 05:03 +0200
              Re: Alternative C compilers on x86_64 Linux? BartC <bc@freeuk.com> - 2016-09-30 12:00 +0100
                Re: Alternative C compilers on x86_64 Linux? Hans-Peter Diettrich <DrDiettrich1@netscape.net> - 2016-09-30 20:15 +0200
                Re: Alternative C compilers on x86_64 Linux? BartC <bc@freeuk.com> - 2016-10-01 22:17 +0100
            Re: Alternative C compilers on x86_64 Linux? BartC <bc@freeuk.com> - 2016-09-30 12:28 +0100
              Re: Alternative C compilers on x86_64 Linux? BartC <bc@freeuk.com> - 2016-10-17 22:49 +0100
        Re: Alternative C compilers on x86_64 Linux? George Neuner <gneuner2@comcast.net> - 2016-09-28 21:24 -0400
      Re: Alternative C compilers on x86_64 Linux? George Neuner <gneuner2@comcast.net> - 2016-09-28 01:01 -0400
        Re: Alternative C compilers on x86_64 Linux? arnold@skeeve.com (Aharon Robbins) - 2016-09-29 02:55 +0000
      Re: Alternative C compilers on x86_64 Linux? arnold@skeeve.com - 2016-09-29 05:30 -0600
        Re: Alternative C compilers on x86_64 Linux? arnold@skeeve.com (Aharon Robbins) - 2016-09-30 10:13 +0000

csiph-web