aaron.ballman created this revision.
aaron.ballman added reviewers: rsmith, erichkeane, jyknight.
aaron.ballman requested review of this revision.
Herald added a project: clang.

We currently have a very useful page tracking our implementation status of C++ 
features (https://clang.llvm.org/cxx_status.html) but we have nothing similar 
for C. This patch adds the initial support for tracking this information. It's 
a work-in-progress.

Currently, the document is generated by hand from the information listed in the 
latest C2x draft (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2596.pdf for 
the moment) on the papers that directly impact the language (as opposed to 
library features). This means information is missing about all the C versions 
before C2x and it is missing the papers that have been accepted but not yet 
rolled into the working draft.

I verified the proposals that I believe Clang definitively does/does not 
implement, but I marked a number of papers as "unknown" because I've not had 
the chance to see what support we have for them yet. I expect the "Unknown" 
columns to dwindle as I get the chance to check their status more thoroughly. I 
also expect we'll add papers from C17 and potentially C11, but I am not certain 
I have the bandwidth to go as far back in time as C99 let alone C89. Once the 
status page for features is done, a future endeavor can add a DR status page.

Assuming that this status page is desirable to others, I figure we can commit 
the incomplete page and I can add information to it post-commit, as I have the 
time. One question this work did raise for me is whether we want to update the 
bug tracker to have specific C versions like we do for C++ (currently, we 
categorize by standard version for C++ and just use "C" as a catch-all for all 
the versions of C)?


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D103987

Files:
  clang/www/c_status.html
  clang/www/menu.html.incl

Index: clang/www/menu.html.incl
===================================================================
--- clang/www/menu.html.incl
+++ clang/www/menu.html.incl
@@ -12,6 +12,7 @@
     <a href="/docs/UsersManual.html">User's Manual</a>
     <a href="/compatibility.html">Language&nbsp;Compatibility</a>
     <a href="/docs/LanguageExtensions.html">Language&nbsp;Extensions</a>
+    <a href="/c_status.html">C Status</a>
     <a href="/cxx_status.html">C++ Status</a>
   </div>
 
Index: clang/www/c_status.html
===================================================================
--- /dev/null
+++ clang/www/c_status.html
@@ -0,0 +1,296 @@
+<!DOCTYPE html>
+<html>
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+  <title>Clang - C Programming Language Status</title>
+  <link type="text/css" rel="stylesheet" href="menu.css">
+  <link type="text/css" rel="stylesheet" href="content.css">
+  <style type="text/css">
+    .none { background-color: #FFCCCC }
+    .partial { background-color: #FFE0B0 }
+    .unreleased { background-color: #FFFF99 }
+    .unknown { background-color: #FF55FF }
+    .full { background-color: #CCFF99 }
+    .na { background-color: #DDDDDD }
+    :target { background-color: #FFFFBB; outline: #DDDD55 solid thin; }
+    th { background-color: #FFDDAA }
+    td { vertical-align: middle }
+    tt { white-space: nowrap }
+  </style>
+</head>
+<body>
+
+<!--#include virtual="menu.html.incl"-->
+
+<div id="content">
+
+<!--*************************************************************************-->
+<h1>C Support in Clang</h1>
+<!--*************************************************************************-->
+
+<p>Clang implements the following published and upcoming ISO C standards:</p>
+
+<table width="689" border="1" cellspacing="0">
+<tr>
+ <th>Language Standard</th>
+ <th>Flag</th>
+ <th>Available in Clang?</th>
+</tr>
+<tr>
+ <td><a href="#c89">C89</a></td>
+ <td><tt>-std=c89</tt></td>
+ <td class="full" align="center">Yes</td>
+</tr>
+<tr>
+ <td><a href="#c99">C99</a></td>
+ <td><tt>-std=c99</tt></td>
+ <td class="full" align="center">Almost certainly</td>
+</tr>
+<tr>
+ <td><a href="#c11">C11</a></td>
+ <td><tt>-std=c11</tt></td>
+ <td class="full" align="center">Probably</td>
+</tr>
+<tr>
+ <td><a href="#c17">C17</a></td>
+ <td><tt>-std=c17</tt></td>
+ <td class="full" align="center">Maybe?</td>
+</tr>
+<tr>
+ <td><a href="#c2x">C2x</a></td>
+ <td><tt>-std=c2x</tt></td>
+ <td class="partial" align="center">Partial</td>
+</tr>
+</table>
+
+<p>The Clang community is continually striving to improve C standards
+compliance between releases. We implement the resolution for defect
+reports, but we do not currently track our DR status (help with
+tracking DR status is appreciated).</p>
+
+<p>The <a href="https://bugs.llvm.org/";>LLVM bug tracker</a> contains a
+Clang C component that tracks known bugs with Clang's language
+conformance.</p>
+
+<h2 id="c89">C89 implementation status</h2>
+
+<p></p>
+
+<h2 id="c99">C99 implementation status</h2>
+
+<p></p>
+
+<h2 id="c11">C11 implementation status</h2>
+
+<p></p>
+
+<h2 id="c17">C17 implementation status</h2>
+
+<p></p>
+
+<h2 id="c2x">C2x implementation status</h2>
+
+<p></p>
+
+<p>You can use Clang in C2x mode with the <code>-std=c2x</code> option.</p>
+
+<details open>
+<summary>List of features and minimum Clang version with support</summary>
+
+<table width="689" border="1" cellspacing="0">
+ <tr>
+    <th>Language Feature</th>
+    <th>C2x Proposal</th>
+    <th>Available in Clang?</th>
+ </tr>
+    <!-- Pre-Oct 2019 Papers -->
+    <tr>
+      <td>Evaluation formats</td>
+      <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2186.pdf";>N2186</a></td>
+      <td class="unknown" align="center">Unknown</td>
+    </tr>
+    <tr>
+      <td>Clarifying the restrict Keyword v2</td>
+      <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2260.pdf";>N2660</a></td>
+      <td class="unknown" align="center">Unknown</td>
+    </tr>
+    <tr>
+      <td>Harmonizing static_assert with C++</td>
+      <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2265.pdf";>N2665</a></td>
+      <td class="full" align="center">Clang 9</td>
+    </tr>
+    <tr>
+      <td>nodiscard attribute</td>
+      <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2667.pdf";>N2667</a></td>
+      <td class="full" align="center">Clang 9</td>
+    </tr>
+    <tr>
+      <td>maybe_unused attribute</td>
+      <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2670.pdf";>N2670</a></td>
+      <td class="full" align="center">Clang 9</td>
+    </tr>
+    <tr id="TS18661">
+      <td rowspan="6">TS 18661 Integration</td>
+    </tr>
+      <tr> <!-- Pre-Oct 2019 -->
+        <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2314.pdf";>N2314</a></td>
+        <td class="unknown" align="center">Unknown</td>
+      </tr>
+      <tr> <!-- Pre-Oct 2019 -->
+        <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2341.pdf";>N2341</a></td>
+        <td class="unknown" align="center">Unknown</td>
+      </tr>
+      <tr> <!-- Pre-Oct 2019 -->
+        <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2401.pdf";>N2401</a></td>
+        <td class="unknown" align="center">Unknown</td>
+      </tr>
+      <tr> <!-- Pre-Oct 2019 -->
+        <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2359.pdf";>N2359</a></td>
+        <td class="unknown" align="center">Unknown</td>
+      </tr>
+      <tr> <!-- Nov 2020 -->
+        <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2546.pdf";>N2546</a></td>
+        <td class="unknown" align="center">Unknown</td>
+      </tr>
+    <tr>
+      <td>Preprocessor line numbers unspecified</td>
+      <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2322.htm";>N2322</a></td>
+      <td class="full" align="center">Yes</td>
+    </tr>
+    <tr>
+      <td>deprecated attribute</td>
+      <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2334.pdf";>N2334</a></td>
+      <td class="full" align="center">Clang 9</td>
+    </tr>
+    <tr id="Attributes">
+      <td rowspan="3">Attributes</td>
+    </tr>
+      <tr> <!-- Pre-Oct 2019 -->
+        <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2335.pdf";>N2335</a></td>
+        <td class="full" align="center">Clang 9</td>
+      </tr>
+      <tr> <!-- Aug 2020 -->
+        <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2554.pdf";>N2554</a></td>
+        <td class="full" align="center">Clang 9</td>
+      </tr>
+    <tr>
+      <td>Defining new types in offsetof</td>
+      <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2350.htm";>N2350</a></td>
+      <td class="full" align="center">Yes</td>
+    </tr>
+    <tr>
+      <td>fallthrough attribute</td>
+      <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2408.pdf";>N2408</a></td>
+      <td class="full" align="center">Clang 9</td>
+    </tr>
+    <tr>
+      <td>Two's complement sign representation</td>
+      <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2412.pdf";>N2412</a></td>
+      <td class="unknown" align="center">Unknown</td>
+    </tr>
+    <tr>
+      <td>Adding the u8 character prefix</td>
+      <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2418.pdf";>N2418</a></td>
+      <td class="none" align="center">No</td>
+    </tr>
+    <tr>
+      <td>Remove support for function definitions with identifier lists</td>
+      <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2432.pdf";>N2432</a></td>
+      <td class="none" align="center">No</td>
+    </tr>
+    <!-- Oct 2019 Papers -->
+    <tr>
+      <td>*_IS_IEC_60559 feature test macros</td>
+      <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2379.htm";>N2379</a></td>
+      <td class="unknown" align="center">Unknown</td>
+    </tr>
+    <tr>
+      <td>Floating-point negation and conversion</td>
+      <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2416.pdf";>N2416</a></td>
+      <td class="unknown" align="center">Unknown</td>
+    </tr>
+    <tr>
+      <td>Annex F.8 update for implementation extensions and rounding</td>
+      <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2384.pdf";>N2384</a></td>
+      <td class="unknown" align="center">Unknown</td>
+    </tr>
+    <tr>
+      <td>_Bool definitions for true and false</td>
+      <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2393.pdf";>N2393</a></td>
+      <td class="none" align="center">No</td>
+    </tr>
+    <!-- Mar 2020 Papers -->
+    <tr>
+      <td>[[nodiscard("should have a reason")]]</td>
+      <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2448.pdf";>N2448</a></td>
+      <td class="full" align="center">Clang 10</td>
+    </tr>
+    <tr>
+      <td>Allowing unnamed parameters in function definitions</td>
+      <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2480.pdf";>N2480</a></td>
+      <td class="full" align="center">Clang 11</td>
+    </tr>
+    <!-- Aug 2020 Papers -->
+    <tr>
+      <td>Free positioning of labels inside compound statements</td>
+      <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2508.pdf";>N2508</a></td>
+      <td class="none" align="center">No</td>
+    </tr>
+    <tr>
+      <td>Clarification request for C17 example of undefined behavior</td>
+      <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2517.pdf";>N2517</a></td>
+      <td class="none" align="center">No</td>
+    </tr>
+    <tr>
+      <td>Querying attribute support</td>
+      <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2553.pdf";>N2553</a></td>
+      <td class="full" align="center">Clang 9</td>
+    </tr>
+    <!-- Nov 2020 Papers -->
+    <tr>
+      <td>Binary literals</td>
+      <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2549.pdf";>N2549</a></td>
+      <td class="full" align="center">Clang 9</td>
+    </tr>
+    <tr>
+      <td>Allow duplicate attributes</td>
+      <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2557.pdf";>N2557</a></td>
+      <td class="unreleased" align="center">Clang 13</td>
+    </tr>
+    <tr>
+      <td>Character encoding of diagnostic text</td>
+      <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2563.pdf";>N2563</a></td>
+      <td class="full" align="center">Yes</td>
+    </tr>
+    <tr>
+      <td>What we think we reserve</td>
+      <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2572.pdf";>N2572</a></td>
+      <td class="partial" align="center">Yes</td>
+    </tr>
+    <tr>
+      <td>Decimal floating-point triples</td>
+      <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2580.htm";>N2580</a></td>
+      <td class="unknown" align="center">Unknown</td>
+    </tr>
+    <tr>
+      <td>Remove mixed wide string literal concatenation</td>
+      <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2594.htm";>N2594</a></td>
+      <td class="full" align="center">Clang 9</td>
+    </tr>
+    <tr>
+      <td>Update to IEC 60559:2020</td>
+      <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2600.pdf";>N2600</a></td>
+      <td class="unknown" align="center">Unknown</td>
+    </tr>
+    <tr>
+      <td>Compatibility of Pointers to Arrays with Qualifiers</td>
+      <td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2607.pdf";>N2607</a></td>
+      <td class="unknown" align="center">Unknown</td>
+    </tr>
+</table>
+</details>
+
+</div>
+</body>
+</html>
+
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to