[clang] 3ff680a - [C11] Claim we do not conform to WG14 N1285 yet

Aaron Ballman via cfe-commits cfe-commits at lists.llvm.org
Mon Jun 24 06:50:49 PDT 2024


Author: Aaron Ballman
Date: 2024-06-24T09:50:37-04:00
New Revision: 3ff680a1a57d74a5c94d3da35594a8046a879888

URL: https://github.com/llvm/llvm-project/commit/3ff680a1a57d74a5c94d3da35594a8046a879888
DIFF: https://github.com/llvm/llvm-project/commit/3ff680a1a57d74a5c94d3da35594a8046a879888.diff

LOG: [C11] Claim we do not conform to WG14 N1285 yet

This also updates the status for C11 to be Partial, and because C17 is
C11 plus DR resolutions, that makes C17 also Partial.

Added: 
    clang/test/C/C11/n1285.c

Modified: 
    clang/www/c_status.html

Removed: 
    


################################################################################
diff  --git a/clang/test/C/C11/n1285.c b/clang/test/C/C11/n1285.c
new file mode 100644
index 0000000000000..e7a9463e68103
--- /dev/null
+++ b/clang/test/C/C11/n1285.c
@@ -0,0 +1,24 @@
+// RUN: %clang_cc1 -verify=wrong -std=c99 %s
+// RUN: %clang_cc1 -verify=wrong -std=c11 %s
+// RUN: %clang_cc1 -verify=cpp -std=c++11 -x c++ %s
+
+/* WG14 N1285: No
+ * Extending the lifetime of temporary objects (factored approach)
+ *
+ * NB: we do not properly materialize temporary expressions in situations where
+ * it would be expected; that is why the "no-diagnostics" marking is named
+ * "wrong". We do issue the expected diagnostic in C++ mode.
+ */
+
+// wrong-no-diagnostics
+
+struct X { int a[5]; };
+struct X f(void);
+
+int foo(void) {
+  // FIXME: This diagnostic should be issued in C11 as well (though not in C99,
+  // as this paper was a breaking change between C99 and C11).
+  int *p = f().a; // cpp-warning {{temporary whose address is used as value of local variable 'p' will be destroyed at the end of the full-expression}}
+  return *p;
+}
+

diff  --git a/clang/www/c_status.html b/clang/www/c_status.html
index d71d4c216f744..922a84ca34312 100644
--- a/clang/www/c_status.html
+++ b/clang/www/c_status.html
@@ -57,12 +57,12 @@ <h1>C Support in Clang</h1>
 <tr>
  <td><a href="#c11">C11</a></td>
  <td><tt>-std=c11</tt></td>
- <td class="unknown" align="center">Probably</td>
+ <td class="partial" align="center">Partial</td>
 </tr>
 <tr>
  <td><a href="#c17">C17</a></td>
  <td><tt>-std=c17</tt></td>
- <td class="unknown" align="center">Maybe?</td>
+ <td class="partial" align="center">Partial</td>
 </tr>
 <tr>
  <td><a href="#c2x">C23</a></td>
@@ -425,7 +425,7 @@ <h2 id="c11">C11 implementation status</h2>
     <tr>
       <td>Extending the lifetime of temporary objects (factored approach)</td>
       <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1285.htm">N1285</a></td>
-      <td class="unknown" align="center">Unknown</td>
+      <td class="none" align="center">No</td>
     </tr>
     <tr>
       <td>Requiring signed char to have no padding bits</td>


        


More information about the cfe-commits mailing list