[PATCH] D74387: [OpenMP][SYCL] Improve diagnosing of unsupported types usage
Mariya Podchishchaeva via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu May 28 08:07:47 PDT 2020
Fznamznon marked 2 inline comments as done.
Fznamznon added inline comments.
================
Comment at: clang/lib/Sema/Sema.cpp:1727
+
+ QualType Ty = D->getType();
+ auto CheckType = [&](QualType Ty) {
----------------
jdoerfert wrote:
> Nit: Move below `CheckType` to avoid shadowing and confusion with the arg there.
Done, thanks
================
Comment at: clang/test/OpenMP/nvptx_unsupported_type_codegen.cpp:21
char c;
T() : a(12), f(15) {}
T &operator+(T &b) { f += b.a; return *this;}
----------------
jdoerfert wrote:
> Why is this not diagnosed? I mean we cannot assign 15 on the device, can we? Or does it work because it is a constant (and we basically just memcpy something)?
>
> If it's the latter, do we have a test in the negative version that makes sure `T(int i) : a(i), f(i) {}` is flagged?
Unfortunately, nor this case neither `T(int i) : a(i), f(i) {}` is not diagnosed. This happens because `DiagnoseUseOfDecl` call seems missing for member initializers, not because there is memcpy. So, for example, such case is diagnosed:
```
struct B {
__float128 a;
};
#pragma omp declare target
void foo() {
B var = {1}; // error: 'a' requires 128 bit size '__float128' type support, but device 'nvptx64-unknown-unknown' does not support it
}
```
`DiagnoseUseOfDecl` function is called in so many cases and I guess it is meant to be called on each usage of each declaration, that is why I think the correct fix is add call to `DiagnoseUseOfDecl` somewhere near building of member initializers . This change even doesn't break my local `check-clang` LIT tests run, but I'm not really sure that such change is in scope of this patch, because `DiagnoseUseOfDecl` contains a lot of other diagnostics as well.
================
Comment at: clang/test/OpenMP/nvptx_unsupported_type_codegen.cpp:81
-// CHECK: define weak void @__omp_offloading_{{.+}}foo{{.+}}_l75([[BIGTYPE:.+]]*
-// CHECK: store [[BIGTYPE]] {{0xL00000000000000003FFF000000000000|0xM3FF00000000000000000000000000000}}, [[BIGTYPE]]* %
----------------
jdoerfert wrote:
> Just checking, we verify in the other test this would result in an error, right?
Yes, I added such test case in `nvptx_unsupported_type_messages.cpp` .
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D74387/new/
https://reviews.llvm.org/D74387
More information about the cfe-commits
mailing list