[clang] 548f3f9 - Update the status & add tests for some more C99 DRs

Aaron Ballman via cfe-commits cfe-commits at lists.llvm.org
Wed Jul 6 11:34:52 PDT 2022


Author: Aaron Ballman
Date: 2022-07-06T14:34:36-04:00
New Revision: 548f3f906148c821cd30d61921b6aa2e2c866f1c

URL: https://github.com/llvm/llvm-project/commit/548f3f906148c821cd30d61921b6aa2e2c866f1c
DIFF: https://github.com/llvm/llvm-project/commit/548f3f906148c821cd30d61921b6aa2e2c866f1c.diff

LOG: Update the status & add tests for some more C99 DRs

Added: 
    clang/test/C/drs/dr253.c

Modified: 
    clang/test/C/drs/dr2xx.c
    clang/www/c_dr_status.html

Removed: 
    


################################################################################
diff  --git a/clang/test/C/drs/dr253.c b/clang/test/C/drs/dr253.c
new file mode 100644
index 0000000000000..3eae0a01586a7
--- /dev/null
+++ b/clang/test/C/drs/dr253.c
@@ -0,0 +1,27 @@
+/* RUN: %clang_cc1 -std=c89 -ast-dump -o -  %s | FileCheck %s
+   RUN: %clang_cc1 -std=c99 -ast-dump -o -  %s | FileCheck %s
+   RUN: %clang_cc1 -std=c11 -ast-dump -o -  %s | FileCheck %s
+   RUN: %clang_cc1 -std=c17 -ast-dump -o -  %s | FileCheck %s
+   RUN: %clang_cc1 -std=c2x -ast-dump -o -  %s | FileCheck %s
+ */
+
+/* WG14 DR253: yes
+ * "overriding" in designated initializers
+ */
+struct fred {
+  char s [6];
+  int n;
+};
+
+struct fred y [] = { { { "abc" }, 1 }, [0] = { .s[0] = 'q' } };
+
+/* Ensure that y[0] is initialized as if by the initializer { 'q' }. */
+
+// CHECK: VarDecl 0x{{.*}} <line:16:1, col:62> col:13 y 'struct fred[1]' cinit
+// CHECK-NEXT: InitListExpr 0x{{.*}} <col:20, col:62> 'struct fred[1]'
+// CHECK-NEXT: InitListExpr 0x{{.*}} <col:46, col:60> 'struct fred':'struct fred'
+// CHECK-NEXT: InitListExpr 0x{{.*}} <col:50, col:56> 'char[6]'
+// CHECK-NEXT: array_filler
+// CHECK-NEXT: ImplicitCastExpr
+// CHECK-NEXT: CharacterLiteral 0x{{.*}} <col:56> 'int' 113
+// CHECK-NEXT: ImplicitValueInitExpr 0x{{.*}} <<invalid sloc>> 'int'

diff  --git a/clang/test/C/drs/dr2xx.c b/clang/test/C/drs/dr2xx.c
index b34b7ef2cce79..0d5a564ba101d 100644
--- a/clang/test/C/drs/dr2xx.c
+++ b/clang/test/C/drs/dr2xx.c
@@ -32,6 +32,18 @@
  *
  * WG14 DR234: yes
  * Miscellaneous Typos
+ *
+ * WG14 DR245: yes
+ * Missing paragraph numbers
+ *
+ * WG14 DR247: yes
+ * Are values a form of behaviour?
+ *
+ * WG14 DR248: yes
+ * Limits are required for optional types
+ *
+ * WG14 DR255: yes
+ * Non-prototyped function calls and argument mismatches
  */
 
 
@@ -144,3 +156,99 @@ void dr230(void) {
 /* expected-error at -1 {{invalid preprocessing directive}} \
    expected-warning at -1 {{missing terminating ' character}}
 */
+
+/* WG14 DR237: no
+ * Declarations using [static]
+ */
+void dr237_f(int array[static 10]); /* c89only-warning {{static array size is a C99 feature}}
+                                       expected-note {{callee declares array parameter as static here}}
+                                     */
+void dr237_1(void) {
+  int array[4];
+  dr237_f(array); /* expected-warning {{array argument is too small; contains 4 elements, callee requires at least 10}} */
+}
+
+/* FIXME: the composite type for this declaration should retain the static
+ * array extent instead of losing it.
+ */
+void dr237_f(int array[]);
+
+void dr237_2(void) {
+  int array[4];
+  /* FIXME: this should diagnose the same as above. */
+  dr237_f(array);
+}
+
+/* WG14 DR246: yes
+ * Completion of declarators
+ */
+void dr246(void) {
+  int i[i]; /* expected-error {{use of undeclared identifier 'i'}} */
+}
+
+/* WG14 DR250: yes
+ * Non-directives within macro arguments
+ */
+void dr250(void) {
+#define dr250_nothing(x)
+
+  /* FIXME: See DR231 regarding the error about an invalid preprocessing
+   * directive.
+   */
+
+  dr250_nothing(
+#nondirective    /* expected-error {{invalid preprocessing directive}}
+                    expected-warning {{embedding a directive within macro arguments has undefined behavior}}
+                  */
+  )
+
+#undef dr250_nothing
+}
+
+/* WG14 DR251: yes
+ * Are struct fred and union fred the same type?
+ */
+union dr251_fred { int a; }; /* expected-note {{previous use is here}} */
+void dr251(void) {
+  struct dr251_fred *ptr; /* expected-error {{use of 'dr251_fred' with tag type that does not match previous declaration}} */
+}
+
+#if __STDC_VERSION__ < 202000L
+/* WG14 DR252: yes
+ * Incomplete argument types when calling non-prototyped functions
+ */
+void dr252_no_proto();  /* expected-warning {{a function declaration without a prototype is deprecated in all versions of C}} */
+void dr252_proto(void); /* expected-note {{'dr252_proto' declared here}} */
+void dr252(void) {
+  /* It's a constraint violation to pass an argument to a function with a
+   * prototype that specifies a void parameter.
+   */
+  dr252_proto(dr252_no_proto()); /* expected-error {{too many arguments to function call, expected 0, have 1}} */
+
+  /* It's technically UB to pass an incomplete type to a function without a
+   * prototype, but Clang treats it as an error.
+   */
+  dr252_no_proto(dr252_proto()); /* expected-error {{argument type 'void' is incomplete}}
+                                    expected-warning {{passing arguments to 'dr252_no_proto' without a prototype is deprecated in all versions of C and is not supported in C2x}}
+                                  */
+}
+#endif /* __STDC_VERSION__ < 202000L */
+
+/* WG14 DR258: yes
+ * Ordering of "defined" and macro replacement
+ */
+void dr258(void) {
+  /* We get the diagnostic twice because the argument is used twice in the
+   * expansion. */
+#define repeat(x) x && x
+#if repeat(defined fred) /* expected-warning 2 {{macro expansion producing 'defined' has undefined behavior}} */
+#endif
+
+  /* We get no diagnostic because the argument is unused. */
+#define forget(x) 0
+#if forget(defined fred)
+#endif
+
+#undef repeat
+#undef forget
+}

diff  --git a/clang/www/c_dr_status.html b/clang/www/c_dr_status.html
index 239e8e8140ba8..132eadd6d6f6e 100644
--- a/clang/www/c_dr_status.html
+++ b/clang/www/c_dr_status.html
@@ -1356,7 +1356,7 @@ <h2 id="cdr">C defect report implementation status</h2>
     <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_237.htm">237</a></td>
     <td>NAD</td>
     <td>Declarations using [static]</td>
-    <td class="unknown" align="center">Unknown</td>
+    <td class="none" align="center">No</td>
   </tr>
   <tr id="238">
     <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_238.htm">238</a></td>
@@ -1385,7 +1385,7 @@ <h2 id="cdr">C defect report implementation status</h2>
   <tr id="242">
     <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_242.htm">242</a></td>
     <td>C99</td>
-    <td></td>
+    <td>Make the base standard and Annex F consistent for logb(0)</td>
     <td class="na" align="center">N/A</td>
   </tr>
   <tr id="243">
@@ -1410,49 +1410,49 @@ <h2 id="cdr">C defect report implementation status</h2>
     <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_246.htm">246</a></td>
     <td>NAD</td>
     <td>Completion of declarators</td>
-    <td class="unknown" align="center">Unknown</td>
+    <td class="full" align="center">Yes</td>
   </tr>
   <tr id="247">
     <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_247.htm">247</a></td>
     <td>C99</td>
     <td>Are values a form of behaviour?</td>
-    <td class="unknown" align="center">Unknown</td>
+    <td class="full" align="center">Yes</td>
   </tr>
   <tr id="248">
     <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_248.htm">248</a></td>
     <td>C99</td>
-    <td>limits are required for optional types</td>
-    <td class="unknown" align="center">Unknown</td>
+    <td>Limits are required for optional types</td>
+    <td class="full" align="center">Yes</td>
   </tr>
   <tr id="249">
     <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_249.htm">249</a></td>
-    <td>C99</td>
+    <td>Dup</td>
     <td>Lacuna applying C89:TC1 to C99</td>
-    <td class="unknown" align="center">Unknown</td>
+    <td class="none" align="center">Duplicate of <a href="#9">9</a></td>
   </tr>
   <tr id="250">
     <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_250.htm">250</a></td>
     <td>C99</td>
     <td>Non-directives within macro arguments</td>
-    <td class="unknown" align="center">Unknown</td>
+    <td class="full" align="center">Yes</td>
   </tr>
   <tr id="251">
     <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_251.htm">251</a></td>
     <td>C99</td>
     <td>Are struct fred and union fred the same type?</td>
-    <td class="unknown" align="center">Unknown</td>
+    <td class="full" align="center">Yes</td>
   </tr>
   <tr id="252">
     <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_252.htm">252</a></td>
     <td>NAD</td>
     <td>Incomplete argument types when calling non-prototyped functions</td>
-    <td class="unknown" align="center">Unknown</td>
+    <td class="full" align="center">Yes</td>
   </tr>
   <tr id="253">
     <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_253.htm">253</a></td>
     <td>NAD</td>
     <td>"overriding" in designated initializers</td>
-    <td class="unknown" align="center">Unknown</td>
+    <td class="full" align="center">Yes</td>
   </tr>
   <tr id="254">
     <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_254.htm">254</a></td>
@@ -1464,7 +1464,7 @@ <h2 id="cdr">C defect report implementation status</h2>
     <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_255.htm">255</a></td>
     <td>NAD</td>
     <td>Non-prototyped function calls and argument mismatches</td>
-    <td class="unknown" align="center">Unknown</td>
+    <td class="full" align="center">Yes</td>
   </tr>
   <tr id="256">
     <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_256.htm">256</a></td>
@@ -1482,7 +1482,7 @@ <h2 id="cdr">C defect report implementation status</h2>
     <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_258.htm">258</a></td>
     <td>NAD</td>
     <td>Ordering of "defined" and macro replacement</td>
-    <td class="unknown" align="center">Unknown</td>
+    <td class="full" align="center">Yes</td>
   </tr>
   <tr id="259">
     <td><a href="https://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_259.htm">259</a></td>


        


More information about the cfe-commits mailing list