[PATCH] D113838: Sema: Don't erroneously reject `void{}`
Aaron Puchert via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Sun Nov 14 08:19:37 PST 2021
aaronpuchert added a subscriber: Tyker.
aaronpuchert added a comment.
CC @Tyker for the changes to `SemaCXX/attr-annotate.cpp`.
================
Comment at: clang/include/clang/Basic/DiagnosticSemaKinds.td:5848-5849
def err_illegal_initializer_type : Error<"illegal initializer type %0">;
+def err_init_list_void_nonempty : Error<
+ "initializer list for 'void' must be empty">;
def ext_init_list_type_narrowing : ExtWarn<
----------------
Might also consider it a narrowing conversion. But I can't find the standard specifically calling it that.
================
Comment at: clang/test/CXX/expr/expr.post/expr.type.conv/p2.cpp:12
+void brace_list_nonempty() {
+ return void{1}; // expected-error {{initializer list for 'void' must be empty}}
+}
----------------
With parantheses this is (correctly) allowed:
> If the initializer is a parenthesized single expression, the type conversion expression is equivalent to the corresponding cast expression.
[expr.static.cast]p6:
> Any expression can be explicitly converted to type cv `void`, in which case it becomes a discarded-value expression ([expr.prop]).
Not sure if we need a test for that.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D113838/new/
https://reviews.llvm.org/D113838
More information about the cfe-commits
mailing list