We added a checkmark all narbar's that has the make effect of clicking on the **Nu HTML check this web page** link at the very bottom. This makes it much more convenient when one needs to quickly check the HTML of a number of web pages. Run `make www` to perform the above.
271 lines
13 KiB
HTML
271 lines
13 KiB
HTML
<!DOCTYPE html>
|
||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||
<!-- START: two lines up starts content from: inc/top.default.html -->
|
||
|
||
<!-- END: this line ends content from: inc/top.default.html -->
|
||
<!-- START: this line starts content from: inc/head.default.html -->
|
||
|
||
<head>
|
||
<link rel="stylesheet" href="../../ioccc.css">
|
||
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@100..900&display=swap" rel="stylesheet">
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
|
||
<title>The International Obfuscated C Code Contest</title>
|
||
<link rel="icon" type="image/x-icon" href="../../favicon.ico">
|
||
<meta name="description" content="compilers.md for 1986/marshall">
|
||
<meta name="keywords" content="IOCCC, 1986/marshall, compilers.md">
|
||
</head>
|
||
|
||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||
<!-- !!! DO NOT MODIFY THIS FILE - This file is generated by a tool !!! -->
|
||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||
|
||
<!-- END: this line ends content from: inc/head.default.html -->
|
||
|
||
<!-- -->
|
||
<!-- This web page was formed via the tool: bin/gen-other-html.sh -->
|
||
<!-- The content of main section of this web page came from: 1986/marshall/compilers.md -->
|
||
<!-- -->
|
||
|
||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||
<!-- !!! Do not modify this web page, instead modify the file: 1986/marshall/compilers.md !!! -->
|
||
<!-- !!! Do not modify this web page, instead modify the file: 1986/marshall/compilers.md !!! -->
|
||
<!-- !!! Do not modify this web page, instead modify the file: 1986/marshall/compilers.md !!! -->
|
||
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
||
|
||
<!-- Markdown content was converted into HTML via the tool: bin/md2html.sh -->
|
||
|
||
<!-- START: this line starts content from: inc/body.default.html -->
|
||
|
||
<body>
|
||
|
||
<!-- END: this line ends content from: inc/body.default.html -->
|
||
<!-- START: this line starts content from: inc/topbar.default.html -->
|
||
|
||
<div class="theader">
|
||
<nav class="topbar">
|
||
<div class="container">
|
||
<div class="logo">
|
||
IOCCC
|
||
</div>
|
||
|
||
<div class="topbar-items">
|
||
<div class="item">
|
||
<span class="item-header">
|
||
Home
|
||
</span>
|
||
|
||
<div class="sub-item">
|
||
<div class="outfit-font"><a href="../../index.html">IOCCC Home</a></div>
|
||
<div class="outfit-font"><a href="../../years.html">Winning Entries</a></div>
|
||
<div class="outfit-font"><a href="../../authors.html">People who have won</a></div>
|
||
<div class="outfit-font"><a href="../../location.html">Location of authors</a></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="item">
|
||
<span class="item-header">
|
||
News
|
||
</span>
|
||
|
||
<div class="sub-item">
|
||
<div class="outfit-font"><a href="../../news.html">IOCCC News</a></div>
|
||
<div class="outfit-font"><a href="../../status.html">Contest status</a></div>
|
||
<div class="outfit-font"><a href="../../next/index.html">Rules and Guidelines</a></div>
|
||
<div class="outfit-font"><a href="../../faq.html#submit">How to enter the IOCCC</a></div>
|
||
<div class="outfit-font"><a href="../../faq.html">FAQ</a></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="item">
|
||
<span class="item-header">
|
||
Bugs
|
||
</span>
|
||
|
||
<div class="sub-item">
|
||
<div class="outfit-font"><a href="../../bugs.html">Bugs & (mis)features</a></div>
|
||
<div class="outfit-font"><a href="../../faq.html#fix_an_entry">Fixing IOCCC entries</a></div>
|
||
<div class="outfit-font"><a href="../../faq.html#fix_web_site">Fixing the web site</a></div>
|
||
<div class="outfit-font"><a href="../../faq.html#fix_author">Fixing author info</a></div>
|
||
<div class="outfit-font"><a href="../../thanks-for-help.html">Thanks for the help</a></div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="item">
|
||
<span class="item-header">
|
||
Judges
|
||
</span>
|
||
|
||
<div class="sub-item">
|
||
<div class="outfit-font"><a href="../../judges.html">The IOCCC Judges</a></div>
|
||
<div class="outfit-font"><a href="../../contact.html">Contacting the IOCCC</a></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</nav>
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/topbar.default.html -->
|
||
<!-- START: this line starts content from: inc/header.default.html -->
|
||
|
||
<div class="header">
|
||
<img src="../../png/ioccc.png" alt="IOCCC image by Matt Zucker" width=300 height=110>
|
||
<h1>The International Obfuscated C Code Contest</h1>
|
||
<h2>compilers.md for 1986/marshall</h2>
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/header.default.html -->
|
||
<!-- START: this line starts content from: inc/navbar.up2index.html -->
|
||
|
||
<div class="navbar">
|
||
<a class="Left" href="index.html">↑ jump to index.html ↑</a>
|
||
<a class="Right" href="https://validator.w3.org/nu/?doc=#">✓</a>
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/navbar.up2index.html -->
|
||
<!-- START: this line starts content from: inc/before-content.default.html -->
|
||
|
||
<div class="content" id="content">
|
||
|
||
<!-- END: this line ends content from: inc/before-content.default.html -->
|
||
<!-- START: this line starts content for HTML phase 21 by: bin/pandoc-wrapper.sh via bin/md2html.sh -->
|
||
|
||
<h1 id="conflicting-compilers-and-optimisers-that-broke-this-entry-in-2023">Conflicting compilers and optimisers that broke this entry in 2023</h1>
|
||
<p>As briefly noted in the <a href="README.md">README.md</a> gcc and clang caused different
|
||
problems with this entry depending on the optimiser being enabled or not, where
|
||
if the optimiser was enabled it would work with one compiler and not the other.
|
||
But if you then disabled the optimiser the opposite problem would occur: the
|
||
working compiler would no longer work and the non-functional one would start to
|
||
work! And then there’s the problem of linux versus macOS causing problems.</p>
|
||
<p>The <a href="marshall.alt.c">alternate code</a> (source code) demonstrates the problem so
|
||
you can see if your compiler has the problem as described below.</p>
|
||
<p>In some versions of gcc and clang (this was first discovered in fedora linux 38)
|
||
if the compiler was enabled one compiler would generate code that segfaulted but
|
||
the other one would not. However, when then disabling the optimiser the compiler
|
||
that had no problem suddenly did and the one that did suddenly did not. But
|
||
segfaulting was not by any means the only problem.</p>
|
||
<p>Another problem was that depending on the optimiser an infinite loop would be
|
||
entered. But then removing it would cause other problems as well, including a
|
||
segfault.</p>
|
||
<p>It was not only one compiler that dumped core. Both dumped core with other
|
||
behaviour, depending on what changes in code were made and the optimiser being
|
||
on or off. Clang in macOS also dumped core!</p>
|
||
<p>The <a href="README.md#alternate-code">alternate code</a> (README.md) has the original fix
|
||
for clang which works with some compilers depending on the optimiser. When we
|
||
refer to the code below we refer to the alternate code.</p>
|
||
<h2 id="the-conflicting-compiler-problems">The conflicting compiler problems:</h2>
|
||
<p>Below we describe the conflicting options that resulted in the need to modify
|
||
the original code.</p>
|
||
<h3 id="linux">Linux</h3>
|
||
<p>With the optimiser disabled GCC compiled the code to enter an infinite loop.
|
||
Enabling the optimiser and it worked fine. But if the optimiser is enabled clang
|
||
generates code that first prints the text twice (it should print it once) and
|
||
then immediately dumps core!</p>
|
||
<p>But then there’s that infinite loop. What happens if we remove it?</p>
|
||
<p>Once the loop is removed if we compile with clang and the optimiser is disabled
|
||
all is okay. If however we compile with gcc and the optimiser is disabled the
|
||
string is printed once and then the program dumps core! Why is this? It is
|
||
because of the call to <code>_exit()</code> (see below).</p>
|
||
<p>Clang works fine with the loop removed and the optimiser disabled. If however we
|
||
enable the optimiser clang will generate code that prints the string twice and
|
||
dumps core just like before! What about the call to <code>_exit()</code>?</p>
|
||
<p>The call was:</p>
|
||
<pre><code> _exit(argv[(int)*argc-2/cc[1*(int)*argc]|-1<<4]);</code></pre>
|
||
<p>Changing it to not refer to these variables and just exit 1 and the problems
|
||
disappear!</p>
|
||
<h3 id="macos">macOS</h3>
|
||
<p>But then there was macOS which had another problem!</p>
|
||
<p>If the infinite loop is not removed/commented out and the optimiser is enabled
|
||
it works fine but if it’s disabled it prints out the string and then enters an
|
||
infinite loop!</p>
|
||
<p>After we fix the infinite loop if we change the <code>_exit()</code> call in macOS and
|
||
disable the optimiser we might get something like:</p>
|
||
<pre><code> $ ./marshall
|
||
choo choo
|
||
Segmentation fault: 11</code></pre>
|
||
<p>Observe how it doesn’t print it twice. But of course it segfaults so it’s not
|
||
right either.</p>
|
||
<p>If the optimiser is enabled, however, we will see that it works fine before the
|
||
change to <code>_exit()</code>.</p>
|
||
<h2 id="summary">Summary</h2>
|
||
<p>And that is the tale of a little <strike>engine</strike> train that
|
||
could…eventually! Or perhaps it’s the compilers, optimisers and OSes that
|
||
eventually could?</p>
|
||
<p>Whichever you wish it to be, it now works with both clang and gcc! Choo choo!</p>
|
||
<!--
|
||
|
||
Copyright © 1984-2024 by Landon Curt Noll. All Rights Reserved.
|
||
|
||
You are free to share and adapt this file under the terms of this license:
|
||
|
||
Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||
|
||
For more information, see:
|
||
|
||
https://creativecommons.org/licenses/by-sa/4.0/
|
||
|
||
-->
|
||
|
||
<!-- END: this line ends content for HTML phase 21 by: bin/pandoc-wrapper.sh via bin/md2html.sh -->
|
||
<!-- START: this line starts content from: inc/after-content.default.html -->
|
||
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/after-content.default.html -->
|
||
<!-- START: this line starts content from: inc/footer.default.html -->
|
||
|
||
<!--
|
||
|
||
Copyright © 1984-2024 by Landon Curt Noll. All Rights Reserved.
|
||
|
||
You are free to share and adapt this file under the terms of this license:
|
||
|
||
Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
|
||
|
||
For more information, see:
|
||
|
||
https://creativecommons.org/licenses/by-sa/4.0/
|
||
|
||
-->
|
||
|
||
<div class="footer">
|
||
<div id="copyright"><h2>Copyright and CC BY-SA 4.0 License</h2></div>
|
||
<p>All IOCCC content including this file and web page are:</p>
|
||
<b> Copyright © 1984-2024 by Landon Curt Noll. <a href="https://creativecommons.org/faq/#what-does-some-rights-reserved-mean">Some Rights Reserved</a>.</b>
|
||
<p>This work is licensed by Landon Curt Noll under:</p>
|
||
<p><b><a href="https://creativecommons.org/licenses/by-sa/4.0/?ref=chooser-v1"
|
||
target="_blank" rel="license noopener noreferrer" style="display:inline-block;"> CC BY-SA 4.0
|
||
<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
|
||
src="../../png/cc.png"
|
||
alt="cc inside circle symbol">
|
||
<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
|
||
src="../../png/by.png"
|
||
alt="person inside circle symbol">
|
||
<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"
|
||
src="../../png/sa.png"
|
||
alt="arrow looping back on itself inside circle symbol">
|
||
</a></b></p>
|
||
<p>The <b>CC BY-SA 4.0 LEGAL CODE</b> for this license is found under:</p>
|
||
<p> <b><a href="https://creativecommons.org/licenses/by-sa/4.0/legalcode.en">
|
||
https://creativecommons.org/licenses/by-sa/4.0/legalcode.en</a></b></p>
|
||
<p>You should <b>carefully review</b> all of the terms and conditions of the
|
||
<a href="https://creativecommons.org/licenses/by-sa/4.0/legalcode.en">actual license</a>
|
||
before using the licensed material.</p>
|
||
<p>You may wish to review the <b><a href="../../license.html">highlights of some of the key
|
||
features and terms</a></b> of the <a href="https://creativecommons.org/licenses/by-sa/4.0/legalcode.en">actual license</a>.</p>
|
||
<h2>Coda</h2>
|
||
<p><a href="https://validator.w3.org/nu/?doc=#">Nu HTML check this web page</a></p>
|
||
<p><a href="#top">Jump to top</a> <a href="#content">Jump to Content</a> <a href="#inventory">Jump to Inventory</a></p>
|
||
</div>
|
||
|
||
<!-- END: this line ends content from: inc/footer.default.html -->
|
||
<!-- START: this line starts content from: inc/bottom.default.html -->
|
||
|
||
</body>
|
||
</html>
|
||
|
||
<!-- END: this line ends content from: inc/bottom.default.html -->
|