forked from OSchip/llvm-project
Updating more entries in the C DR Status page
Adds test coverage or information for ~25 more C DRs.
This commit is contained in:
parent
6baf44c8b1
commit
3472b6eb0a
|
@ -13,6 +13,24 @@
|
||||||
*
|
*
|
||||||
* WG14 DR104: dup 084
|
* WG14 DR104: dup 084
|
||||||
* Incomplete tag types in a parameter list
|
* Incomplete tag types in a parameter list
|
||||||
|
*
|
||||||
|
* WG14 DR109: yes
|
||||||
|
* Are undefined values and undefined behavior the same?
|
||||||
|
*
|
||||||
|
* WG14 DR110: dup 047
|
||||||
|
* Formal parameters having array-of-non-object types
|
||||||
|
*
|
||||||
|
* WG14 DR117: yes
|
||||||
|
* Abstract semantics, sequence points, and expression evaluation
|
||||||
|
*
|
||||||
|
* WG14 DR121: yes
|
||||||
|
* Conversions of pointer values to integral types
|
||||||
|
*
|
||||||
|
* WG14 DR122: dup 015
|
||||||
|
* Conversion/widening of bit-fields
|
||||||
|
*
|
||||||
|
* WG14 DR125: yes
|
||||||
|
* Using things declared as 'extern (qualified) void'
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
@ -71,3 +89,137 @@ void dr105(void) {
|
||||||
extern int i; /* expected-note {{previous declaration is here}} */
|
extern int i; /* expected-note {{previous declaration is here}} */
|
||||||
extern float i; /* expected-error {{redeclaration of 'i' with a different type: 'float' vs 'int'}} */
|
extern float i; /* expected-error {{redeclaration of 'i' with a different type: 'float' vs 'int'}} */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* WG14 DR106: yes
|
||||||
|
* When can you dereference a void pointer?
|
||||||
|
*
|
||||||
|
* NB: This is a partial duplicate of DR012.
|
||||||
|
*/
|
||||||
|
void dr106(void *p, int i) {
|
||||||
|
/* The behavior changed between C89 and C99. */
|
||||||
|
(void)&*p; /* c89only-warning {{ISO C forbids taking the address of an expression of type 'void'}} */
|
||||||
|
/* The behavior of all three of these is undefined. */
|
||||||
|
(void)*p;
|
||||||
|
(void)(i ? *p : *p);
|
||||||
|
(void)(*p, *p); /* expected-warning {{left operand of comma operator has no effect}} */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* WG14 DR108: yes
|
||||||
|
* Can a macro identifier hide a keyword?
|
||||||
|
*/
|
||||||
|
void dr108(void) {
|
||||||
|
#define const
|
||||||
|
const int i = 12;
|
||||||
|
#undef const
|
||||||
|
const int j = 12; /* expected-note {{variable 'j' declared const here}} */
|
||||||
|
|
||||||
|
i = 100; /* Okay, the keyword was hidden by the macro. */
|
||||||
|
j = 100; /* expected-error {{cannot assign to variable 'j' with const-qualified type 'const int'}} */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* WG14 DR111: yes
|
||||||
|
* Conversion of pointer-to-qualified type values to type (void*) values
|
||||||
|
*/
|
||||||
|
void dr111(const char *ccp, void *vp) {
|
||||||
|
vp = ccp; /* expected-warning {{assigning to 'void *' from 'const char *' discards qualifiers}} */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* WG14 DR112: yes
|
||||||
|
* Null pointer constants and relational comparisons
|
||||||
|
*/
|
||||||
|
void dr112(void *vp) {
|
||||||
|
/* The behavior of this expression is pedantically undefined.
|
||||||
|
* FIXME: should we diagnose under -pedantic?
|
||||||
|
*/
|
||||||
|
(void)(vp > (void*)0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* WG14 DR113: yes
|
||||||
|
* Return expressions in functions declared to return qualified void
|
||||||
|
*/
|
||||||
|
volatile void dr113_v(volatile void *vvp) { /* expected-warning {{function cannot return qualified void type 'volatile void'}} */
|
||||||
|
return *vvp; /* expected-warning {{void function 'dr113_v' should not return void expression}} */
|
||||||
|
}
|
||||||
|
const void dr113_c(const void *cvp) { /* expected-warning {{function cannot return qualified void type 'const void'}} */
|
||||||
|
return *cvp; /* expected-warning {{void function 'dr113_c' should not return void expression}} */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* WG14 DR114: yes
|
||||||
|
* Initialization of multi-dimensional char array objects
|
||||||
|
*/
|
||||||
|
void dr114(void) {
|
||||||
|
char array[2][5] = { "defghi" }; /* expected-warning {{initializer-string for char array is too long}} */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* WG14 DR115: yes
|
||||||
|
* Member declarators as declarators
|
||||||
|
*/
|
||||||
|
void dr115(void) {
|
||||||
|
struct { int mbr; }; /* expected-warning {{declaration does not declare anything}} */
|
||||||
|
union { int mbr; }; /* expected-warning {{declaration does not declare anything}} */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* WG14 DR116: yes
|
||||||
|
* Implicit unary & applied to register arrays
|
||||||
|
*/
|
||||||
|
void dr116(void) {
|
||||||
|
register int array[5] = { 0, 1, 2, 3, 4 };
|
||||||
|
(void)array; /* expected-error {{address of register variable requested}} */
|
||||||
|
(void)array[3]; /* expected-error {{address of register variable requested}} */
|
||||||
|
(void)(array + 3); /* expected-error {{address of register variable requested}} */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* WG14 DR118: yes
|
||||||
|
* Completion point for enumerated types
|
||||||
|
*/
|
||||||
|
void dr118(void) {
|
||||||
|
enum E {
|
||||||
|
/* The enum isn't a complete type until the closing }, but an
|
||||||
|
* implementation may complete the type earlier if it has sufficient type
|
||||||
|
* information to calculate size or alignment, etc.
|
||||||
|
*/
|
||||||
|
Val = sizeof(enum E)
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/* WG14 DR119: yes
|
||||||
|
* Initialization of multi-dimensional array objects
|
||||||
|
*/
|
||||||
|
void dr119(void) {
|
||||||
|
static int array[][] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } }; /* expected-error {{array has incomplete element type 'int[]'}} */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* WG14 DR120: yes
|
||||||
|
* Semantics of assignment to (and initialization of) bit-fields
|
||||||
|
*/
|
||||||
|
void dr120(void) {
|
||||||
|
/* We could verify this one with a codegen test to ensure that the proper
|
||||||
|
* value is stored into bit, but the diagnostic tells us what the value is
|
||||||
|
* after conversion, so we can lean on that for verification.
|
||||||
|
*/
|
||||||
|
struct S { unsigned bit:1; };
|
||||||
|
struct S object1 = { 3 }; /* expected-warning {{implicit truncation from 'int' to bit-field changes value from 3 to 1}} */
|
||||||
|
struct S object2;
|
||||||
|
object2.bit = 3; /* expected-warning {{implicit truncation from 'int' to bit-field changes value from 3 to 1}} */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* WG14 DR123: yes
|
||||||
|
* 'Type categories' and qualified types
|
||||||
|
*/
|
||||||
|
void dr123(void) {
|
||||||
|
/* Both of these examples are strictly conforming. */
|
||||||
|
enum E1 {
|
||||||
|
enumerator1 = (const int) 9
|
||||||
|
};
|
||||||
|
enum E2 {
|
||||||
|
enumerator2 = (volatile int) 9
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/* WG14 DR124: yes
|
||||||
|
* Casts to 'a void type' versus casts to 'the void type'
|
||||||
|
*/
|
||||||
|
void dr124(void) {
|
||||||
|
/* A cast can cast to void or any qualified version of void. */
|
||||||
|
(const volatile void)0;
|
||||||
|
}
|
||||||
|
|
|
@ -690,122 +690,122 @@ conformance.</p>
|
||||||
<tr id="106">
|
<tr id="106">
|
||||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_106.html">106</a></td>
|
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_106.html">106</a></td>
|
||||||
<td>NAD</td>
|
<td>NAD</td>
|
||||||
<td>ANSI/ISO C Defect report #rfg13</td>
|
<td>When can you dereference a void pointer?</td>
|
||||||
<td class="unknown" align="center">Unknown</td>
|
<td class="full" align="center">Yes</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="107">
|
<tr id="107">
|
||||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_107.html">107</a></td>
|
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_107.html">107</a></td>
|
||||||
<td>NAD</td>
|
<td>NAD</td>
|
||||||
<td>ANSI/ISO C Defect report #rfg14</td>
|
<td>Type requirements of the assert macro parameter</td>
|
||||||
<td class="na" align="center">N/A</td>
|
<td class="na" align="center">N/A</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="108">
|
<tr id="108">
|
||||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_108.html">108</a></td>
|
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_108.html">108</a></td>
|
||||||
<td>NAD</td>
|
<td>NAD</td>
|
||||||
<td>ANSI/ISO C Defect report #rfg15</td>
|
<td>Can a macro identifier hide a keyword?</td>
|
||||||
<td class="unknown" align="center">Unknown</td>
|
<td class="full" align="center">Yes</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="109">
|
<tr id="109">
|
||||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_109.html">109</a></td>
|
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_109.html">109</a></td>
|
||||||
<td>NAD</td>
|
<td>NAD</td>
|
||||||
<td>ANSI/ISO C Defect report #rfg16</td>
|
<td>Are undefined values and undefined behavior the same?</td>
|
||||||
<td class="unknown" align="center">Unknown</td>
|
<td class="full" align="center">Yes</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="110">
|
<tr id="110">
|
||||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_110.html">110</a></td>
|
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_110.html">110</a></td>
|
||||||
<td>Dup</td>
|
<td>Dup</td>
|
||||||
<td>Formal parameters having array-of-non-object types</td>
|
<td>Formal parameters having array-of-non-object types</td>
|
||||||
<td class="unknown" align="center">Duplicate of <a href="#47">47</a></td>
|
<td class="full" align="center">Duplicate of <a href="#47">47</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="111">
|
<tr id="111">
|
||||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_111.html">111</a></td>
|
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_111.html">111</a></td>
|
||||||
<td>NAD</td>
|
<td>NAD</td>
|
||||||
<td>Conversion of pointer-to-qualified type values to type (void*) values</td>
|
<td>Conversion of pointer-to-qualified type values to type (void*) values</td>
|
||||||
<td class="unknown" align="center">Unknown</td>
|
<td class="full" align="center">Yes</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="112">
|
<tr id="112">
|
||||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_112.html">112</a></td>
|
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_112.html">112</a></td>
|
||||||
<td>NAD</td>
|
<td>NAD</td>
|
||||||
<td>Null pointer constants and relational comparisons</td>
|
<td>Null pointer constants and relational comparisons</td>
|
||||||
<td class="unknown" align="center">Unknown</td>
|
<td class="full" align="center">Yes</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="113">
|
<tr id="113">
|
||||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_113.html">113</a></td>
|
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_113.html">113</a></td>
|
||||||
<td>NAD</td>
|
<td>NAD</td>
|
||||||
<td>Return expressions in functions declared to return qualified void</td>
|
<td>Return expressions in functions declared to return qualified void</td>
|
||||||
<td class="unknown" align="center">Unknown</td>
|
<td class="full" align="center">Yes</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="114">
|
<tr id="114">
|
||||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_114.html">114</a></td>
|
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_114.html">114</a></td>
|
||||||
<td>NAD</td>
|
<td>NAD</td>
|
||||||
<td>Initialization of multi-dimensional char array objects</td>
|
<td>Initialization of multi-dimensional char array objects</td>
|
||||||
<td class="unknown" align="center">Unknown</td>
|
<td class="full" align="center">Yes</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="115">
|
<tr id="115">
|
||||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_115.html">115</a></td>
|
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_115.html">115</a></td>
|
||||||
<td>NAD</td>
|
<td>NAD</td>
|
||||||
<td>Member declarators as declarators</td>
|
<td>Member declarators as declarators</td>
|
||||||
<td class="unknown" align="center">Unknown</td>
|
<td class="full" align="center">Yes</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="116">
|
<tr id="116">
|
||||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_116.html">116</a></td>
|
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_116.html">116</a></td>
|
||||||
<td>NAD</td>
|
<td>NAD</td>
|
||||||
<td>Implicit unary & applied to register arrays</td>
|
<td>Implicit unary & applied to register arrays</td>
|
||||||
<td class="unknown" align="center">Unknown</td>
|
<td class="full" align="center">Yes</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="117">
|
<tr id="117">
|
||||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_117.html">117</a></td>
|
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_117.html">117</a></td>
|
||||||
<td>NAD</td>
|
<td>NAD</td>
|
||||||
<td>Abstract semantics, sequence points, and expression evaluation</td>
|
<td>Abstract semantics, sequence points, and expression evaluation</td>
|
||||||
<td class="unknown" align="center">Unknown</td>
|
<td class="full" align="center">Yes</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="118">
|
<tr id="118">
|
||||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_118.html">118</a></td>
|
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_118.html">118</a></td>
|
||||||
<td>C89</td>
|
<td>C89</td>
|
||||||
<td>Completion point for enumerated types</td>
|
<td>Completion point for enumerated types</td>
|
||||||
<td class="unknown" align="center">Unknown</td>
|
<td class="full" align="center">Yes</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="119">
|
<tr id="119">
|
||||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_119.html">119</a></td>
|
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_119.html">119</a></td>
|
||||||
<td>NAD</td>
|
<td>NAD</td>
|
||||||
<td>Initialization of multi-dimensional array objects</td>
|
<td>Initialization of multi-dimensional array objects</td>
|
||||||
<td class="unknown" align="center">Unknown</td>
|
<td class="full" align="center">Yes</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="120">
|
<tr id="120">
|
||||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_120.html">120</a></td>
|
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_120.html">120</a></td>
|
||||||
<td>NAD</td>
|
<td>NAD</td>
|
||||||
<td>Semantics of assignment to (and initialization of) bit-fields</td>
|
<td>Semantics of assignment to (and initialization of) bit-fields</td>
|
||||||
<td class="unknown" align="center">Unknown</td>
|
<td class="full" align="center">Yes</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="121">
|
<tr id="121">
|
||||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_121.html">121</a></td>
|
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_121.html">121</a></td>
|
||||||
<td>NAD</td>
|
<td>NAD</td>
|
||||||
<td>Conversions of pointer values to integral types</td>
|
<td>Conversions of pointer values to integral types</td>
|
||||||
<td class="unknown" align="center">Unknown</td>
|
<td class="full" align="center">Yes</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="122">
|
<tr id="122">
|
||||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_122.html">122</a></td>
|
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_122.html">122</a></td>
|
||||||
<td>Dup</td>
|
<td>Dup</td>
|
||||||
<td>Conversion/widening of bit-fields</td>
|
<td>Conversion/widening of bit-fields</td>
|
||||||
<td class="unknown" align="center">Duplicate of <a href="#15">15</a></td>
|
<td class="full" align="center">Duplicate of <a href="#15">15</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="123">
|
<tr id="123">
|
||||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_123.html">123</a></td>
|
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_123.html">123</a></td>
|
||||||
<td>NAD</td>
|
<td>NAD</td>
|
||||||
<td>'Type categories' and qualified types</td>
|
<td>'Type categories' and qualified types</td>
|
||||||
<td class="unknown" align="center">Unknown</td>
|
<td class="full" align="center">Yes</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="124">
|
<tr id="124">
|
||||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_124.html">124</a></td>
|
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_124.html">124</a></td>
|
||||||
<td>C89</td>
|
<td>C89</td>
|
||||||
<td>Casts to 'a void type' versus casts to 'the void type'</td>
|
<td>Casts to 'a void type' versus casts to 'the void type'</td>
|
||||||
<td class="unknown" align="center">Unknown</td>
|
<td class="full" align="center">Yes</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="125">
|
<tr id="125">
|
||||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_125.html">125</a></td>
|
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_125.html">125</a></td>
|
||||||
<td>NAD</td>
|
<td>NAD</td>
|
||||||
<td>Using things declared as 'extern (qualified) void'</td>
|
<td>Using things declared as 'extern (qualified) void'</td>
|
||||||
<td class="unknown" align="center">Unknown</td>
|
<td class="full" align="center">Yes</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr id="126">
|
<tr id="126">
|
||||||
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_126.html">126</a></td>
|
<td><a href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/dr_126.html">126</a></td>
|
||||||
|
|
Loading…
Reference in New Issue