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@-1 {{invalid preprocessing directive}} \ expected-warning@-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> _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits