================
@@ -7639,6 +7639,8 @@ def err_attribute_arm_mve_polymorphism : Error<
   "'__clang_arm_mve_strict_polymorphism' attribute can only be applied to an 
MVE/NEON vector type">;
 def err_attribute_webassembly_funcref : Error<
   "'__funcref' attribute can only be applied to a function pointer type">;
+def err_c23_underspecified_object_declaration: Error<
+  "'%select{struct|<ERROR>|union|<ERROR>|enum}0 %1' is defined as an 
underspecified object initializer">;
----------------
AaronBallman wrote:

I think the terminology used in the standard is really hard for mortals to 
understand, but I also think the definition of "underspecified" makes it hard 
to capture this in a single diagnostic and still be precise. But I think 
existing diagnostics cover the other cases, mostly.

C23 6.7.1p12: A declaration such that the declaration specifiers contain no 
type specifier or that is declared with constexpr is said to be underspecified. 
If such a declaration is not a definition, if it declares no or more than one 
ordinary identifier, if the declared identifier already has a declaration in 
the same scope, if the declared entity is not an object, or if anywhere within 
the sequence of tokens making up the declaration identifiers that are not 
ordinary are declared, the behavior is implementation-defined.

So I think the best I can come up with is:

`%select{declaration using a deduced type|constexpr declaration}0 %1 also 
declares %2 which is not an ordinary identifier`

I think "if such a declaration is not a definition" is already covered by 
`constexpr variable 'i' must be initialized by a constant expression`: 
https://godbolt.org/z/nvKEzv975
I think "if it declares no or more than one ordinary identifier" is already 
covered by `expected identifier or '('` or is supported by Clang: 
https://godbolt.org/z/Yas4od5Ev (Note, we should add documentation for the 
implementation-defined extension accepting multiple declarations in a group.)
I think "if the declared identifier already has a declaration in the same 
scope" is not correctly supported: https://godbolt.org/z/Kab7GvW85 but this 
should be handled by an existing redeclaration diagnostic when we fix it.
I think "if the declared entity is not an object" is already covered by "'auto' 
not allowed in function return type": https://godbolt.org/z/KzeTeczY7
I think "if anywhere within the sequence of tokens making up the declaration 
identifiers that are not ordinary are declared" is the only thing we're missing 
a diagnostic for, and the above suggested wording would handle it.

So I think we can get away without inflicting "underspecified" on users.

The other half of this paper has to do with scope of identifiers, we may end up 
needing to get creative with diagnostic wording when lookup fails to find an 
identifier from an underspecified declaration.

https://github.com/llvm/llvm-project/pull/79845
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to