[PATCH] D113837: Sema: Let InitListExpr have dependent type instead of 'void'

Aaron Puchert via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Sun Nov 14 08:46:54 PST 2021

aaronpuchert added a subscriber: JonasToth.
aaronpuchert added a comment.

We could also introduce a separate (placeholder) type for initializer lists and perhaps also `ParenListExpr` if the dependent type seems misleading to you.

CC @JonasToth for the changes to `clang-tidy/checkers/cppcoreguidelines-owning-memory.cpp`.

Comment at: clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-owning-memory.cpp:306
   HeapArray(int size, T val, int *problematic) : _data{problematic}, size(size) {} // Bad
+  // CHECK-NOTES: [[@LINE-1]]:50: warning: expected initialization of owner member variable with value of type 'gsl::owner<>'; got '<dependent type>'
If the warning is looking at this in the original template, we're initializing a `gsl::owner<T *>` which is type-dependent. So we can't carry out the initialization yet.

[Got the impression earlier](https://github.com/mgehre/llvm-project/issues/80#issuecomment-567210626) that the lifetime checks want to “understand” templates which can of course not work because templates can be specialized, overload resolution is only performed on  the instantiation, and so on.

Comment at: clang/test/SemaOpenCLCXX/address-space-references.clcpp:25
   c.gen({1, 2});
-  c.glob({1, 2}); //expected-error{{binding reference of type 'const __global short2' (vector of 2 'short' values) to value of type 'void' changes address space}}
+  c.glob({1, 2}); //expected-error{{binding reference of type 'const __global short2' (vector of 2 'short' values) to value of type '<dependent type>' changes address space}}
   c.nested_list({{1, 2}, {3, 4}});
Somehow we seem to fail matching the initializer list, but not report that, only on type mismatch later. I think we should either go through with the initialization, then have a `short __attribute__((ext_vector_type(2)))` and complain that we can't bind the reference to that, or complain when processing the initializer list.

But that's unrelated to this change, `void` was also not correct.

  rG LLVM Github Monorepo



More information about the cfe-commits mailing list