[PATCH] D109315: [clang] Check unsupported types in expressions
This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. Closed by commit rG3dbcea8b957a: Reland [clang] Check unsupported types in expressions (authored by asavonic). Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D109315/new/ https://reviews.llvm.org/D109315 Files: clang/include/clang/Basic/DiagnosticSemaKinds.td clang/include/clang/Sema/Sema.h clang/lib/Sema/Sema.cpp clang/lib/Sema/SemaDecl.cpp clang/lib/Sema/SemaExpr.cpp clang/test/CodeGen/ibm128-unsupported.c clang/test/OpenMP/nvptx_unsupported_type_messages.cpp clang/test/SemaSYCL/float128.cpp clang/test/SemaSYCL/int128.cpp Index: clang/test/SemaSYCL/int128.cpp === --- clang/test/SemaSYCL/int128.cpp +++ clang/test/SemaSYCL/int128.cpp @@ -26,19 +26,22 @@ // expected-note@+1 3{{'A' defined here}} __int128 A; Z<__int128> C; - // expected-error@+2 {{'A' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} - // expected-error@+1 {{'field1' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} + // expected-error@+3 2{{expression requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} + // expected-error@+2 {{'A' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} + // expected-error@+1 {{'field1' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} C.field1 = A; - // expected-error@+1 {{'bigfield' requires 128 bit size 'Z::BIGTYPE' (aka '__int128') type support, but device 'spir64' does not support it}} + // expected-error@+2 {{expression requires 128 bit size 'Z::BIGTYPE' (aka '__int128') type support, but target 'spir64' does not support it}} + // expected-error@+1 {{'bigfield' requires 128 bit size 'Z::BIGTYPE' (aka '__int128') type support, but target 'spir64' does not support it}} C.bigfield += 1.0; - // expected-error@+1 {{'A' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} + // expected-error@+1 {{'A' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} auto foo1 = [=]() { __int128 AA; // expected-note@+2 {{'BB' defined here}} -// expected-error@+1 {{'A' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+1 {{'A' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} auto BB = A; -// expected-error@+1 {{'BB' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+2 {{expression requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} +// expected-error@+1 {{'BB' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} BB += 1; }; @@ -50,7 +53,7 @@ void foo2(){}; // expected-note@+3 {{'P' defined here}} -// expected-error@+2 {{'P' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+2 {{'P' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} // expected-note@+1 2{{'foo' defined here}} __int128 foo(__int128 P) { return P; } @@ -58,7 +61,8 @@ // expected-note@+1 {{'operator __int128' defined here}} struct X { operator __int128() const; } x; bool a = false; - // expected-error@+1 {{'operator __int128' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} + // expected-error@+2 2{{expression requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} + // expected-error@+1 {{'operator __int128' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} a = x == __int128(0); } @@ -74,12 +78,14 @@ host_ok(); kernel([=]() { decltype(CapturedToDevice) D; -// expected-error@+1 {{'CapturedToDevice' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+1 {{'CapturedToDevice' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} auto C = CapturedToDevice; Z<__int128> S; -// expected-error@+1 {{'field1' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+2 {{expression requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} +// expected-error@+1 {{'field1' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} S.field1 += 1; -// expected-error@+1 {{'field' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +//
[PATCH] D109315: [clang] Check unsupported types in expressions
asavonic updated this revision to Diff 373531. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D109315/new/ https://reviews.llvm.org/D109315 Files: clang/include/clang/Basic/DiagnosticSemaKinds.td clang/include/clang/Sema/Sema.h clang/lib/Sema/Sema.cpp clang/lib/Sema/SemaDecl.cpp clang/lib/Sema/SemaExpr.cpp clang/test/CodeGen/ibm128-unsupported.c clang/test/OpenMP/nvptx_unsupported_type_messages.cpp clang/test/SemaSYCL/float128.cpp clang/test/SemaSYCL/int128.cpp Index: clang/test/SemaSYCL/int128.cpp === --- clang/test/SemaSYCL/int128.cpp +++ clang/test/SemaSYCL/int128.cpp @@ -26,19 +26,22 @@ // expected-note@+1 3{{'A' defined here}} __int128 A; Z<__int128> C; - // expected-error@+2 {{'A' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} - // expected-error@+1 {{'field1' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} + // expected-error@+3 2{{expression requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} + // expected-error@+2 {{'A' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} + // expected-error@+1 {{'field1' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} C.field1 = A; - // expected-error@+1 {{'bigfield' requires 128 bit size 'Z::BIGTYPE' (aka '__int128') type support, but device 'spir64' does not support it}} + // expected-error@+2 {{expression requires 128 bit size 'Z::BIGTYPE' (aka '__int128') type support, but target 'spir64' does not support it}} + // expected-error@+1 {{'bigfield' requires 128 bit size 'Z::BIGTYPE' (aka '__int128') type support, but target 'spir64' does not support it}} C.bigfield += 1.0; - // expected-error@+1 {{'A' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} + // expected-error@+1 {{'A' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} auto foo1 = [=]() { __int128 AA; // expected-note@+2 {{'BB' defined here}} -// expected-error@+1 {{'A' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+1 {{'A' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} auto BB = A; -// expected-error@+1 {{'BB' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+2 {{expression requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} +// expected-error@+1 {{'BB' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} BB += 1; }; @@ -50,7 +53,7 @@ void foo2(){}; // expected-note@+3 {{'P' defined here}} -// expected-error@+2 {{'P' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+2 {{'P' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} // expected-note@+1 2{{'foo' defined here}} __int128 foo(__int128 P) { return P; } @@ -58,7 +61,8 @@ // expected-note@+1 {{'operator __int128' defined here}} struct X { operator __int128() const; } x; bool a = false; - // expected-error@+1 {{'operator __int128' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} + // expected-error@+2 2{{expression requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} + // expected-error@+1 {{'operator __int128' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} a = x == __int128(0); } @@ -74,12 +78,14 @@ host_ok(); kernel([=]() { decltype(CapturedToDevice) D; -// expected-error@+1 {{'CapturedToDevice' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+1 {{'CapturedToDevice' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} auto C = CapturedToDevice; Z<__int128> S; -// expected-error@+1 {{'field1' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+2 {{expression requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} +// expected-error@+1 {{'field1' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} S.field1 += 1; -// expected-error@+1 {{'field' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+2 {{expression requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} +// expected-error@+1 {{'field' requires 128 bit size '__int128' type support, but
[PATCH] D109315: [clang] Check unsupported types in expressions
asavonic reopened this revision. asavonic added a comment. This revision is now accepted and ready to land. This is weird... Buildbot reported that `lock/omp_init_lock.c` test crashed with SIGSEGV, but I cannot reproduce this on my machine. I added a check for a null QualType; not sure if it fixes the issue with the test. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D109315/new/ https://reviews.llvm.org/D109315 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D109315: [clang] Check unsupported types in expressions
This revision was automatically updated to reflect the committed changes. Closed by commit rGec6c847179fd: [clang] Check unsupported types in expressions (authored by asavonic). Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D109315/new/ https://reviews.llvm.org/D109315 Files: clang/include/clang/Basic/DiagnosticSemaKinds.td clang/include/clang/Sema/Sema.h clang/lib/Sema/Sema.cpp clang/lib/Sema/SemaDecl.cpp clang/lib/Sema/SemaExpr.cpp clang/test/CodeGen/ibm128-unsupported.c clang/test/OpenMP/nvptx_unsupported_type_messages.cpp clang/test/SemaSYCL/float128.cpp clang/test/SemaSYCL/int128.cpp Index: clang/test/SemaSYCL/int128.cpp === --- clang/test/SemaSYCL/int128.cpp +++ clang/test/SemaSYCL/int128.cpp @@ -26,19 +26,22 @@ // expected-note@+1 3{{'A' defined here}} __int128 A; Z<__int128> C; - // expected-error@+2 {{'A' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} - // expected-error@+1 {{'field1' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} + // expected-error@+3 2{{expression requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} + // expected-error@+2 {{'A' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} + // expected-error@+1 {{'field1' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} C.field1 = A; - // expected-error@+1 {{'bigfield' requires 128 bit size 'Z::BIGTYPE' (aka '__int128') type support, but device 'spir64' does not support it}} + // expected-error@+2 {{expression requires 128 bit size 'Z::BIGTYPE' (aka '__int128') type support, but target 'spir64' does not support it}} + // expected-error@+1 {{'bigfield' requires 128 bit size 'Z::BIGTYPE' (aka '__int128') type support, but target 'spir64' does not support it}} C.bigfield += 1.0; - // expected-error@+1 {{'A' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} + // expected-error@+1 {{'A' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} auto foo1 = [=]() { __int128 AA; // expected-note@+2 {{'BB' defined here}} -// expected-error@+1 {{'A' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+1 {{'A' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} auto BB = A; -// expected-error@+1 {{'BB' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+2 {{expression requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} +// expected-error@+1 {{'BB' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} BB += 1; }; @@ -50,7 +53,7 @@ void foo2(){}; // expected-note@+3 {{'P' defined here}} -// expected-error@+2 {{'P' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+2 {{'P' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} // expected-note@+1 2{{'foo' defined here}} __int128 foo(__int128 P) { return P; } @@ -58,7 +61,8 @@ // expected-note@+1 {{'operator __int128' defined here}} struct X { operator __int128() const; } x; bool a = false; - // expected-error@+1 {{'operator __int128' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} + // expected-error@+2 2{{expression requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} + // expected-error@+1 {{'operator __int128' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} a = x == __int128(0); } @@ -74,12 +78,14 @@ host_ok(); kernel([=]() { decltype(CapturedToDevice) D; -// expected-error@+1 {{'CapturedToDevice' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+1 {{'CapturedToDevice' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} auto C = CapturedToDevice; Z<__int128> S; -// expected-error@+1 {{'field1' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+2 {{expression requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} +// expected-error@+1 {{'field1' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} S.field1 += 1; -// expected-error@+1 {{'field' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+2 {{expression requires 128 bit size '__int128' type
[PATCH] D109315: [clang] Check unsupported types in expressions
Fznamznon accepted this revision. Fznamznon added a comment. LGTM, thanks Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D109315/new/ https://reviews.llvm.org/D109315 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D109315: [clang] Check unsupported types in expressions
jdoerfert accepted this revision. jdoerfert added a comment. This revision is now accepted and ready to land. LG, let's wait for @Fznamznon though. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D109315/new/ https://reviews.llvm.org/D109315 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D109315: [clang] Check unsupported types in expressions
asavonic updated this revision to Diff 371912. asavonic added a comment. Rebased Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D109315/new/ https://reviews.llvm.org/D109315 Files: clang/include/clang/Basic/DiagnosticSemaKinds.td clang/include/clang/Sema/Sema.h clang/lib/Sema/Sema.cpp clang/lib/Sema/SemaDecl.cpp clang/lib/Sema/SemaExpr.cpp clang/test/CodeGen/ibm128-unsupported.c clang/test/OpenMP/nvptx_unsupported_type_messages.cpp clang/test/SemaSYCL/float128.cpp clang/test/SemaSYCL/int128.cpp Index: clang/test/SemaSYCL/int128.cpp === --- clang/test/SemaSYCL/int128.cpp +++ clang/test/SemaSYCL/int128.cpp @@ -26,19 +26,22 @@ // expected-note@+1 3{{'A' defined here}} __int128 A; Z<__int128> C; - // expected-error@+2 {{'A' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} - // expected-error@+1 {{'field1' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} + // expected-error@+3 2{{expression requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} + // expected-error@+2 {{'A' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} + // expected-error@+1 {{'field1' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} C.field1 = A; - // expected-error@+1 {{'bigfield' requires 128 bit size 'Z::BIGTYPE' (aka '__int128') type support, but device 'spir64' does not support it}} + // expected-error@+2 {{expression requires 128 bit size 'Z::BIGTYPE' (aka '__int128') type support, but target 'spir64' does not support it}} + // expected-error@+1 {{'bigfield' requires 128 bit size 'Z::BIGTYPE' (aka '__int128') type support, but target 'spir64' does not support it}} C.bigfield += 1.0; - // expected-error@+1 {{'A' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} + // expected-error@+1 {{'A' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} auto foo1 = [=]() { __int128 AA; // expected-note@+2 {{'BB' defined here}} -// expected-error@+1 {{'A' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+1 {{'A' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} auto BB = A; -// expected-error@+1 {{'BB' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+2 {{expression requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} +// expected-error@+1 {{'BB' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} BB += 1; }; @@ -50,7 +53,7 @@ void foo2(){}; // expected-note@+3 {{'P' defined here}} -// expected-error@+2 {{'P' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+2 {{'P' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} // expected-note@+1 2{{'foo' defined here}} __int128 foo(__int128 P) { return P; } @@ -58,7 +61,8 @@ // expected-note@+1 {{'operator __int128' defined here}} struct X { operator __int128() const; } x; bool a = false; - // expected-error@+1 {{'operator __int128' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} + // expected-error@+2 2{{expression requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} + // expected-error@+1 {{'operator __int128' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} a = x == __int128(0); } @@ -74,12 +78,14 @@ host_ok(); kernel([=]() { decltype(CapturedToDevice) D; -// expected-error@+1 {{'CapturedToDevice' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+1 {{'CapturedToDevice' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} auto C = CapturedToDevice; Z<__int128> S; -// expected-error@+1 {{'field1' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+2 {{expression requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} +// expected-error@+1 {{'field1' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} S.field1 += 1; -// expected-error@+1 {{'field' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+2 {{expression requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} +// expected-error@+1 {{'field' requires 128 bit
[PATCH] D109315: [clang] Check unsupported types in expressions
asavonic updated this revision to Diff 371693. asavonic added a comment. - Reworded the diagnostic. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D109315/new/ https://reviews.llvm.org/D109315 Files: clang/include/clang/Basic/DiagnosticSemaKinds.td clang/include/clang/Sema/Sema.h clang/lib/Sema/Sema.cpp clang/lib/Sema/SemaDecl.cpp clang/lib/Sema/SemaExpr.cpp clang/test/OpenMP/nvptx_unsupported_type_messages.cpp clang/test/SemaSYCL/float128.cpp clang/test/SemaSYCL/int128.cpp Index: clang/test/SemaSYCL/int128.cpp === --- clang/test/SemaSYCL/int128.cpp +++ clang/test/SemaSYCL/int128.cpp @@ -26,19 +26,22 @@ // expected-note@+1 3{{'A' defined here}} __int128 A; Z<__int128> C; - // expected-error@+2 {{'A' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} - // expected-error@+1 {{'field1' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} + // expected-error@+3 2{{expression requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} + // expected-error@+2 {{'A' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} + // expected-error@+1 {{'field1' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} C.field1 = A; - // expected-error@+1 {{'bigfield' requires 128 bit size 'Z::BIGTYPE' (aka '__int128') type support, but device 'spir64' does not support it}} + // expected-error@+2 {{expression requires 128 bit size 'Z::BIGTYPE' (aka '__int128') type support, but target 'spir64' does not support it}} + // expected-error@+1 {{'bigfield' requires 128 bit size 'Z::BIGTYPE' (aka '__int128') type support, but target 'spir64' does not support it}} C.bigfield += 1.0; - // expected-error@+1 {{'A' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} + // expected-error@+1 {{'A' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} auto foo1 = [=]() { __int128 AA; // expected-note@+2 {{'BB' defined here}} -// expected-error@+1 {{'A' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+1 {{'A' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} auto BB = A; -// expected-error@+1 {{'BB' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+2 {{expression requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} +// expected-error@+1 {{'BB' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} BB += 1; }; @@ -50,7 +53,7 @@ void foo2(){}; // expected-note@+3 {{'P' defined here}} -// expected-error@+2 {{'P' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+2 {{'P' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} // expected-note@+1 2{{'foo' defined here}} __int128 foo(__int128 P) { return P; } @@ -58,7 +61,8 @@ // expected-note@+1 {{'operator __int128' defined here}} struct X { operator __int128() const; } x; bool a = false; - // expected-error@+1 {{'operator __int128' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} + // expected-error@+2 2{{expression requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} + // expected-error@+1 {{'operator __int128' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} a = x == __int128(0); } @@ -74,12 +78,14 @@ host_ok(); kernel([=]() { decltype(CapturedToDevice) D; -// expected-error@+1 {{'CapturedToDevice' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+1 {{'CapturedToDevice' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} auto C = CapturedToDevice; Z<__int128> S; -// expected-error@+1 {{'field1' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+2 {{expression requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} +// expected-error@+1 {{'field1' requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} S.field1 += 1; -// expected-error@+1 {{'field' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+2 {{expression requires 128 bit size '__int128' type support, but target 'spir64' does not support it}} +// expected-error@+1 {{'field' requires 128 bit size '__int128' type
[PATCH] D109315: [clang] Check unsupported types in expressions
asavonic added inline comments. Comment at: clang/include/clang/Basic/DiagnosticSemaKinds.td:10687 def err_device_unsupported_type -: Error<"%0 requires %select{|%2 bit size}1 %3 type support, but device " -"'%4' does not support it">; +: Error<"%select{|%1 bit size}0 %2 type is not supported for target '%3'">; def err_omp_lambda_capture_in_declare_target_not_to : Error< Fznamznon wrote: > Maybe it is just me, but the old version was a bit more clear since it > pointed to the wrong declaration. Now looking at the tests I see that clang > ends up emitting several identical diagnostics at the same line, but they > point to the different declarations/expressions used on this line. Should we > still mention which concrete declaration/expression the diagnostic is about? Agree, but I couldn't figure out good wording for the diagnostic that works well for both decl and expr cases. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D109315/new/ https://reviews.llvm.org/D109315 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D109315: [clang] Check unsupported types in expressions
Fznamznon added a comment. No objections, just a couple of minors. Comment at: clang/include/clang/Basic/DiagnosticSemaKinds.td:10687 def err_device_unsupported_type -: Error<"%0 requires %select{|%2 bit size}1 %3 type support, but device " -"'%4' does not support it">; +: Error<"%select{|%1 bit size}0 %2 type is not supported for target '%3'">; def err_omp_lambda_capture_in_declare_target_not_to : Error< Maybe it is just me, but the old version was a bit more clear since it pointed to the wrong declaration. Now looking at the tests I see that clang ends up emitting several identical diagnostics at the same line, but they point to the different declarations/expressions used on this line. Should we still mention which concrete declaration/expression the diagnostic is about? Comment at: clang/include/clang/Sema/Sema.h:12154 - /// Check if the expression is allowed to be used in expressions for the - /// offloading devices. - void checkDeviceDecl(ValueDecl *D, SourceLocation Loc); + /// Check if the type is allowed to be used for this target. + void checkTypeSupport(QualType Ty, SourceLocation Loc, Having that in single source offloading programming models usually two targets are used, "current target" sounds a bit more clear. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D109315/new/ https://reviews.llvm.org/D109315 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D109315: [clang] Check unsupported types in expressions
asavonic created this revision. asavonic added reviewers: erichkeane, Fznamznon. asavonic requested review of this revision. Herald added a reviewer: jdoerfert. Herald added subscribers: cfe-commits, sstefan1. Herald added a project: clang. The patch adds diagnostics for cases like: float F3 = ((__float128)F1 * (__float128)F2) / 2.0f; Sema::checkDeviceDecl (renamed to checkTypeSupport) is changed to work with a type without the corresponding ValueDecl. It is also refactored so that host diagnostics for unsupported types can be added here as well. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D109315 Files: clang/include/clang/Basic/DiagnosticSemaKinds.td clang/include/clang/Sema/Sema.h clang/lib/Sema/Sema.cpp clang/lib/Sema/SemaDecl.cpp clang/lib/Sema/SemaExpr.cpp clang/test/OpenMP/nvptx_unsupported_type_messages.cpp clang/test/SemaSYCL/float128.cpp clang/test/SemaSYCL/int128.cpp Index: clang/test/SemaSYCL/int128.cpp === --- clang/test/SemaSYCL/int128.cpp +++ clang/test/SemaSYCL/int128.cpp @@ -26,19 +26,18 @@ // expected-note@+1 3{{'A' defined here}} __int128 A; Z<__int128> C; - // expected-error@+2 {{'A' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} - // expected-error@+1 {{'field1' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} + // expected-error@+1 4{{128 bit size '__int128' type is not supported for target 'spir64'}} C.field1 = A; - // expected-error@+1 {{'bigfield' requires 128 bit size 'Z::BIGTYPE' (aka '__int128') type support, but device 'spir64' does not support it}} + // expected-error@+1 2{{128 bit size 'Z::BIGTYPE' (aka '__int128') type is not supported for target 'spir64'}} C.bigfield += 1.0; - // expected-error@+1 {{'A' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} + // expected-error@+1 {{128 bit size '__int128' type is not supported for target 'spir64'}} auto foo1 = [=]() { __int128 AA; // expected-note@+2 {{'BB' defined here}} -// expected-error@+1 {{'A' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+1 {{128 bit size '__int128' type is not supported for target 'spir64'}} auto BB = A; -// expected-error@+1 {{'BB' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+1 2{{128 bit size '__int128' type is not supported for target 'spir64'}} BB += 1; }; @@ -50,7 +49,7 @@ void foo2(){}; // expected-note@+3 {{'P' defined here}} -// expected-error@+2 {{'P' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+2 {{128 bit size '__int128' type is not supported for target 'spir64'}} // expected-note@+1 2{{'foo' defined here}} __int128 foo(__int128 P) { return P; } @@ -58,7 +57,7 @@ // expected-note@+1 {{'operator __int128' defined here}} struct X { operator __int128() const; } x; bool a = false; - // expected-error@+1 {{'operator __int128' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} + // expected-error@+1 3{{128 bit size '__int128' type is not supported for target 'spir64'}} a = x == __int128(0); } @@ -74,12 +73,12 @@ host_ok(); kernel([=]() { decltype(CapturedToDevice) D; -// expected-error@+1 {{'CapturedToDevice' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+1 {{128 bit size '__int128' type is not supported for target 'spir64'}} auto C = CapturedToDevice; Z<__int128> S; -// expected-error@+1 {{'field1' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+1 2{{128 bit size '__int128' type is not supported for target 'spir64'}} S.field1 += 1; -// expected-error@+1 {{'field' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+1 2{{128 bit size '__int128' type is not supported for target 'spir64'}} S.field = 1; }); @@ -88,8 +87,8 @@ usage(); // expected-note@+1 {{'' defined here}} BIGTY ; -// expected-error@+3 {{'' requires 128 bit size 'BIGTY' (aka 'unsigned __int128') type support, but device 'spir64' does not support it}} -// expected-error@+2 2{{'foo' requires 128 bit size '__int128' type support, but device 'spir64' does not support it}} +// expected-error@+3 2{{128 bit size '__int128' type is not supported for target 'spir64'}} +// expected-error@+2 1{{128 bit size 'BIGTY' (aka 'unsigned __int128') type is not supported for target 'spir64'}} // expected-note@+1 1{{called by 'operator()'}} auto A = foo(); // expected-note@+1 {{called by 'operator()'}} Index: