[PATCH] D71111: [Sema] Improve diagnostic about addr spaces for overload candidates
zatrazz added a comment. Hi, I am investigating a recurring regression on aarch64-linux bots and bisecting the commits on the build [1] that introduced the regression it points to this one. I don't understand exactly what is triggering the issue, but it only happen on the stage2 build with stage1 clang built with different compilers (gcc 5.4, gcc-7.4.0, and gcc-8.3.0). The issue is on clang itself while trying to execute the Analysis/uninit-sometimes.cpp test: TEST 'Clang :: Analysis/uninit-sometimes.cpp' FAILED Script: -- : 'RUN: at line 1'; /home/buildslave/buildslave/clang-cmake-aarch64-full/stage2/bin/clang -cc1 -internal-isystem /home/buildslave/buildslave/clang-cmake-aarch64-full/stage2/lib/clang/10.0.0/include -nostdsysteminc -std=gnu++11 -Wsometimes-uninitialized -verify /home/buildslave/buildslave/clang-cmake-aarch64-full/llvm/clang/test/Analysis/uninit-sometimes.cpp : 'RUN: at line 2'; /home/buildslave/buildslave/clang-cmake-aarch64-full/stage2/bin/clang -cc1 -internal-isystem /home/buildslave/buildslave/clang-cmake-aarch64-full/stage2/lib/clang/10.0.0/include -nostdsysteminc -std=gnu++11 -Wsometimes-uninitialized -fdiagnostics-parseable-fixits /home/buildslave/buildslave/clang-cmake-aarch64-full/llvm/clang/test/Analysis/uninit-sometimes.cpp 2>&1 | /home/buildslave/buildslave/clang-cmake-aarch64-full/stage2/bin/FileCheck /home/buildslave/buildslave/clang-cmake-aarch64-full/llvm/clang/test/Analysis/uninit-sometimes.cpp -- Exit Code: 134 Command Output (stderr): -- clang: /home/buildslave/buildslave/clang-cmake-aarch64-full/llvm/clang/lib/Basic/Diagnostic.cpp:591: void HandleSelectModifier(const clang::Diagnostic &, unsigned int, const char *, unsigned int, SmallVectorImpl &): Assertion `NextVal != ArgumentEnd && "Value for integer select modifier was" " larger than the number of options in the diagnostic string!"' failed. Stack dump: 0.Program arguments: /home/buildslave/buildslave/clang-cmake-aarch64-full/stage2/bin/clang -cc1 -internal-isystem /home/buildslave/buildslave/clang-cmake-aarch64-full/stage2/lib/clang/10.0.0/include -nostdsysteminc -std=gnu++11 -Wsometimes-uninitialized -verify /home/buildslave/buildslave/clang-cmake-aarch64-full/llvm/clang/test/Analysis/uninit-sometimes.cpp 1. /home/buildslave/buildslave/clang-cmake-aarch64-full/llvm/clang/test/Analysis/uninit-sometimes.cpp:161:1: current parser token 'int' 2. /home/buildslave/buildslave/clang-cmake-aarch64-full/llvm/clang/test/Analysis/uninit-sometimes.cpp:146:32: parsing function body 'test_for_range_true' #0 0x0182be04 PrintStackTraceSignalHandler(void*) (/home/buildslave/buildslave/clang-cmake-aarch64-full/stage2/bin/clang+0x182be04) /home/buildslave/buildslave/clang-cmake-aarch64-full/stage2/tools/clang/test/Analysis/Output/uninit-sometimes.cpp.script: line 2: 63297 Aborted (core dumped) /home/buildslave/buildslave/clang-cmake-aarch64-full/stage2/bin/clang -cc1 -internal-isystem /home/buildslave/buildslave/clang-cmake-aarch64-full/stage2/lib/clang/10.0.0/include -nostdsysteminc -std=gnu++11 -Wsometimes-uninitialized -verify /home/buildslave/buildslave/clang-cmake-aarch64-full/llvm/clang/test/Analysis/uninit-sometimes.cpp The bots run a ubuntu 16.04 container and I can't reproduce on a different one, I am still trying to come up with a better reproduce case. Also, moving the both DiagnosticBuilder::AddString and DiagnosticBuilder::AddTaggedVal outside clang/include/clang/Basic/Diagnostic.h to clang/lib/Basic/Diagnostic.cpp "fixes" the issue (indicating the something is wrong at code generation). This issue has been shown for some time on aarch64-linux bot [2]. Any idea if this is an environmental issue or a real issue? [1] http://lab.llvm.org:8011/builders/clang-cmake-aarch64-full/builds/8562 [2] http://lab.llvm.org:8011/builders/clang-cmake-aarch64-full Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D7/new/ https://reviews.llvm.org/D7 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D71111: [Sema] Improve diagnostic about addr spaces for overload candidates
rjmccall added a comment. Hmm. How about: // For the `this` argument candidate function not viable: 'this' object is in '__private' address space, but method expects object in '__global' address space // For pointer arguments candidate function not viable: cannot pass pointer to '__private' address space as a pointer to '__global' address space in 1st argument // For reference arguments candidate function not viable: cannot bind reference in '__global' address space to object in '__private' address space in 1st argument This would require you to render a string describing the address space yourself. I would suggest "generic address space" for the default AS outside of OpenCL, "'foo' address space" for a language-specific AS (including implicit __private in OpenCL), or "address space N" for a numbered address space. What do you think? CHANGES SINCE LAST ACTION https://reviews.llvm.org/D7/new/ https://reviews.llvm.org/D7 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D71111: [Sema] Improve diagnostic about addr spaces for overload candidates
Anastasia updated this revision to Diff 233424. Anastasia added a comment. - Allow sending address spaces into diagnostics - Change wording of diagnostics for address spaces in overloading CHANGES SINCE LAST ACTION https://reviews.llvm.org/D7/new/ https://reviews.llvm.org/D7 Files: clang/include/clang/AST/Type.h clang/include/clang/Basic/Diagnostic.h clang/include/clang/Basic/DiagnosticSemaKinds.td clang/lib/AST/ASTDiagnostic.cpp clang/lib/AST/TypePrinter.cpp clang/lib/Basic/Diagnostic.cpp clang/lib/Sema/SemaOverload.cpp clang/test/SemaCXX/address-space-references.cpp clang/test/SemaOpenCL/address-spaces-conversions-cl2.0.cl clang/test/SemaOpenCLCXX/address-space-lambda.cl clang/test/SemaOpenCLCXX/address-space-of-this-class-scope.cl Index: clang/test/SemaOpenCLCXX/address-space-of-this-class-scope.cl === --- clang/test/SemaOpenCLCXX/address-space-of-this-class-scope.cl +++ clang/test/SemaOpenCLCXX/address-space-of-this-class-scope.cl @@ -7,8 +7,8 @@ }; void bar(__local C*); -// expected-note@-1{{candidate function not viable: address space mismatch in 1st argument ('decltype(this)' (aka '__global C *')), parameter type must be '__local C *'}} -// expected-note@-2{{candidate function not viable: address space mismatch in 1st argument ('decltype(this)' (aka 'C *')), parameter type must be '__local C *'}} +// expected-note@-1{{candidate function not viable: cannot pass pointer to address space '__global' as a pointer to address space '__local' in 1st argument}} +// expected-note@-2{{candidate function not viable: cannot pass pointer to address space default as a pointer to address space '__local' in 1st argument}} __global C Glob; void foo(){ Index: clang/test/SemaOpenCLCXX/address-space-lambda.cl === --- clang/test/SemaOpenCLCXX/address-space-lambda.cl +++ clang/test/SemaOpenCLCXX/address-space-lambda.cl @@ -12,7 +12,7 @@ // Test lambda with default parameters //CHECK: CXXMethodDecl {{.*}} constexpr operator() 'void () const __generic' [&] {i++;} (); - __constant auto err = [&]() {}; //expected-note-re{{candidate function not viable: address space mismatch in 'this' argument ('__constant (lambda at {{.*}})'), parameter type must be 'const __generic (lambda at {{.*}})'}} + __constant auto err = [&]() {}; //expected-note{{candidate function not viable: 'this' object is in address space '__constant', but method expects object in address space '__generic'}} err(); //expected-error-re{{no matching function for call to object of type '__constant (lambda at {{.*}})'}} // FIXME: There is very limited addr space functionality // we can test when taking lambda type from the object. Index: clang/test/SemaOpenCL/address-spaces-conversions-cl2.0.cl === --- clang/test/SemaOpenCL/address-spaces-conversions-cl2.0.cl +++ clang/test/SemaOpenCL/address-spaces-conversions-cl2.0.cl @@ -42,7 +42,7 @@ #if !__OPENCL_CPP_VERSION__ // expected-note@-3{{passing argument to parameter 'arg_glob' here}} #else -// expected-note-re@-5{{candidate function not viable: address space mismatch in 1st argument ('__{{generic|constant}} int *'), parameter type must be '__global int *'}} +// expected-note-re@-5{{candidate function not viable: cannot pass pointer to address space '__{{generic|constant}}' as a pointer to address space '__global' in 1st argument}} #endif #endif @@ -50,7 +50,7 @@ #if !__OPENCL_CPP_VERSION__ // expected-note@-2{{passing argument to parameter 'arg_loc' here}} #else -// expected-note-re@-4{{candidate function not viable: address space mismatch in 1st argument ('__{{global|generic|constant}} int *'), parameter type must be '__local int *'}} +// expected-note-re@-4{{candidate function not viable: cannot pass pointer to address space '__{{global|generic|constant}}' as a pointer to address space '__local' in 1st argument}} #endif void f_const(__constant int *arg_const) {} @@ -58,7 +58,7 @@ #if !__OPENCL_CPP_VERSION__ // expected-note@-3{{passing argument to parameter 'arg_const' here}} #else -// expected-note-re@-5{{candidate function not viable: address space mismatch in 1st argument ('__{{global|generic}} int *'), parameter type must be '__constant int *'}} +// expected-note-re@-5{{candidate function not viable: cannot pass pointer to address space '__{{global|generic}}' as a pointer to address space '__constant' in 1st argument}} #endif #endif @@ -66,7 +66,7 @@ #if !__OPENCL_CPP_VERSION__ // expected-note@-2{{passing argument to parameter 'arg_priv' here}} #else -// expected-note-re@-4{{candidate function not viable: address space mismatch in 1st argument ('__{{global|generic|constant}} int *'), parameter type must be 'int *'}} +// expected-note-re@-4{{candidate function not viable: cannot pass pointer to address space '__
[PATCH] D71111: [Sema] Improve diagnostic about addr spaces for overload candidates
rjmccall added inline comments. Comment at: clang/include/clang/Basic/DiagnosticSemaKinds.td:3838 +"'this' object is in address space %3, but method expects object in " +"address space %4">; def note_ovl_candidate_bad_gc : Note< I think you need to move "address space" into the diagnostic rendering for `ak_addrspace` so that you can say "generic address space" instead of "address space generic". Comment at: clang/lib/AST/TypePrinter.cpp:1776 + if (AS != LangAS::Default) { +if (AS != LangAS::opencl_private) { + switch (AS) { Can you just make these two cases in the switch? `opencl_private` already seems to be there. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D7/new/ https://reviews.llvm.org/D7 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D71111: [Sema] Improve diagnostic about addr spaces for overload candidates
Anastasia updated this revision to Diff 233579. Anastasia marked an inline comment as done. Anastasia added a comment. - Moved "address space" printing into diagnostic engine - Moved `LangAS::Default` into switch/case statement. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D7/new/ https://reviews.llvm.org/D7 Files: clang/include/clang/AST/Type.h clang/include/clang/Basic/Diagnostic.h clang/include/clang/Basic/DiagnosticSemaKinds.td clang/lib/AST/ASTDiagnostic.cpp clang/lib/AST/TypePrinter.cpp clang/lib/Basic/Diagnostic.cpp clang/lib/Sema/SemaOverload.cpp clang/test/SemaCXX/address-space-references.cpp clang/test/SemaOpenCL/address-spaces-conversions-cl2.0.cl clang/test/SemaOpenCLCXX/address-space-lambda.cl clang/test/SemaOpenCLCXX/address-space-of-this-class-scope.cl Index: clang/test/SemaOpenCLCXX/address-space-of-this-class-scope.cl === --- clang/test/SemaOpenCLCXX/address-space-of-this-class-scope.cl +++ clang/test/SemaOpenCLCXX/address-space-of-this-class-scope.cl @@ -7,8 +7,8 @@ }; void bar(__local C*); -// expected-note@-1{{candidate function not viable: address space mismatch in 1st argument ('decltype(this)' (aka '__global C *')), parameter type must be '__local C *'}} -// expected-note@-2{{candidate function not viable: address space mismatch in 1st argument ('decltype(this)' (aka 'C *')), parameter type must be '__local C *'}} +// expected-note@-1{{candidate function not viable: cannot pass pointer to address space '__global' as a pointer to address space '__local' in 1st argument}} +// expected-note@-2{{candidate function not viable: cannot pass pointer to default address space as a pointer to address space '__local' in 1st argument}} __global C Glob; void foo(){ Index: clang/test/SemaOpenCLCXX/address-space-lambda.cl === --- clang/test/SemaOpenCLCXX/address-space-lambda.cl +++ clang/test/SemaOpenCLCXX/address-space-lambda.cl @@ -12,7 +12,7 @@ // Test lambda with default parameters //CHECK: CXXMethodDecl {{.*}} constexpr operator() 'void () const __generic' [&] {i++;} (); - __constant auto err = [&]() {}; //expected-note-re{{candidate function not viable: address space mismatch in 'this' argument ('__constant (lambda at {{.*}})'), parameter type must be 'const __generic (lambda at {{.*}})'}} + __constant auto err = [&]() {}; //expected-note{{candidate function not viable: 'this' object is in address space '__constant', but method expects object in address space '__generic'}} err(); //expected-error-re{{no matching function for call to object of type '__constant (lambda at {{.*}})'}} // FIXME: There is very limited addr space functionality // we can test when taking lambda type from the object. Index: clang/test/SemaOpenCL/address-spaces-conversions-cl2.0.cl === --- clang/test/SemaOpenCL/address-spaces-conversions-cl2.0.cl +++ clang/test/SemaOpenCL/address-spaces-conversions-cl2.0.cl @@ -42,7 +42,7 @@ #if !__OPENCL_CPP_VERSION__ // expected-note@-3{{passing argument to parameter 'arg_glob' here}} #else -// expected-note-re@-5{{candidate function not viable: address space mismatch in 1st argument ('__{{generic|constant}} int *'), parameter type must be '__global int *'}} +// expected-note-re@-5{{candidate function not viable: cannot pass pointer to address space '__{{generic|constant}}' as a pointer to address space '__global' in 1st argument}} #endif #endif @@ -50,7 +50,7 @@ #if !__OPENCL_CPP_VERSION__ // expected-note@-2{{passing argument to parameter 'arg_loc' here}} #else -// expected-note-re@-4{{candidate function not viable: address space mismatch in 1st argument ('__{{global|generic|constant}} int *'), parameter type must be '__local int *'}} +// expected-note-re@-4{{candidate function not viable: cannot pass pointer to address space '__{{global|generic|constant}}' as a pointer to address space '__local' in 1st argument}} #endif void f_const(__constant int *arg_const) {} @@ -58,7 +58,7 @@ #if !__OPENCL_CPP_VERSION__ // expected-note@-3{{passing argument to parameter 'arg_const' here}} #else -// expected-note-re@-5{{candidate function not viable: address space mismatch in 1st argument ('__{{global|generic}} int *'), parameter type must be '__constant int *'}} +// expected-note-re@-5{{candidate function not viable: cannot pass pointer to address space '__{{global|generic}}' as a pointer to address space '__constant' in 1st argument}} #endif #endif @@ -66,7 +66,7 @@ #if !__OPENCL_CPP_VERSION__ // expected-note@-2{{passing argument to parameter 'arg_priv' here}} #else -// expected-note-re@-4{{candidate function not viable: address space mismatch in 1st argument ('__{{global|generic|constant}} int *'), parameter type must be 'int *'}} +// expected-note-re@-4{{candidate function not viable:
[PATCH] D71111: [Sema] Improve diagnostic about addr spaces for overload candidates
rjmccall accepted this revision. rjmccall added a comment. This revision is now accepted and ready to land. Thanks, that looks much better. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D7/new/ https://reviews.llvm.org/D7 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D71111: [Sema] Improve diagnostic about addr spaces for overload candidates
This revision was automatically updated to reflect the committed changes. Closed by commit rGed8dadb37c7e: [Sema] Improve diagnostic about addr spaces for overload candidates (authored by Anastasia). Herald added a project: clang. Changed prior to commit: https://reviews.llvm.org/D7?vs=233579&id=233777#toc Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D7/new/ https://reviews.llvm.org/D7 Files: clang/include/clang/AST/Type.h clang/include/clang/Basic/Diagnostic.h clang/include/clang/Basic/DiagnosticSemaKinds.td clang/lib/AST/ASTDiagnostic.cpp clang/lib/AST/TypePrinter.cpp clang/lib/Basic/Diagnostic.cpp clang/lib/Sema/SemaOverload.cpp clang/test/SemaCXX/address-space-references.cpp clang/test/SemaOpenCL/address-spaces-conversions-cl2.0.cl clang/test/SemaOpenCLCXX/address-space-lambda.cl clang/test/SemaOpenCLCXX/address-space-of-this-class-scope.cl Index: clang/test/SemaOpenCLCXX/address-space-of-this-class-scope.cl === --- clang/test/SemaOpenCLCXX/address-space-of-this-class-scope.cl +++ clang/test/SemaOpenCLCXX/address-space-of-this-class-scope.cl @@ -7,8 +7,8 @@ }; void bar(__local C*); -// expected-note@-1{{candidate function not viable: address space mismatch in 1st argument ('decltype(this)' (aka '__global C *')), parameter type must be '__local C *'}} -// expected-note@-2{{candidate function not viable: address space mismatch in 1st argument ('decltype(this)' (aka 'C *')), parameter type must be '__local C *'}} +// expected-note@-1{{candidate function not viable: cannot pass pointer to address space '__global' as a pointer to address space '__local' in 1st argument}} +// expected-note@-2{{candidate function not viable: cannot pass pointer to default address space as a pointer to address space '__local' in 1st argument}} __global C Glob; void foo(){ Index: clang/test/SemaOpenCLCXX/address-space-lambda.cl === --- clang/test/SemaOpenCLCXX/address-space-lambda.cl +++ clang/test/SemaOpenCLCXX/address-space-lambda.cl @@ -12,7 +12,7 @@ // Test lambda with default parameters //CHECK: CXXMethodDecl {{.*}} constexpr operator() 'void () const __generic' [&] {i++;} (); - __constant auto err = [&]() {}; //expected-note-re{{candidate function not viable: address space mismatch in 'this' argument ('__constant (lambda at {{.*}})'), parameter type must be 'const __generic (lambda at {{.*}})'}} + __constant auto err = [&]() {}; //expected-note{{candidate function not viable: 'this' object is in address space '__constant', but method expects object in address space '__generic'}} err(); //expected-error-re{{no matching function for call to object of type '__constant (lambda at {{.*}})'}} // FIXME: There is very limited addr space functionality // we can test when taking lambda type from the object. @@ -31,19 +31,19 @@ //CHECK: |-CXXMethodDecl {{.*}} constexpr operator() 'void () const __generic' auto priv2 = []() __generic {}; priv2(); - auto priv3 = []() __global {}; //expected-note-re{{candidate function not viable: address space mismatch in 'this' argument ('(lambda at {{.*}})'), parameter type must be 'const __global (lambda at {{.*}})'}} //expected-note{{conversion candidate of type 'void (*)()'}} + auto priv3 = []() __global {}; //expected-note{{candidate function not viable: 'this' object is in default address space, but method expects object in address space '__global'}} //expected-note{{conversion candidate of type 'void (*)()'}} priv3(); //expected-error{{no matching function for call to object of type}} - __constant auto const1 = []() __private{}; //expected-note-re{{candidate function not viable: address space mismatch in 'this' argument ('__constant (lambda at {{.*}})'), parameter type must be 'const (lambda at {{.*}}'}} //expected-note{{conversion candidate of type 'void (*)()'}} + __constant auto const1 = []() __private{}; //expected-note{{candidate function not viable: 'this' object is in address space '__constant', but method expects object in default address space}} //expected-note{{conversion candidate of type 'void (*)()'}} const1(); //expected-error{{no matching function for call to object of type '__constant (lambda at}} - __constant auto const2 = []() __generic{}; //expected-note-re{{candidate function not viable: address space mismatch in 'this' argument ('__constant (lambda at {{.*}})'), parameter type must be 'const __generic (lambda at {{.*}}'}} //expected-note{{conversion candidate of type 'void (*)()'}} + __constant auto const2 = []() __generic{}; //expected-note{{candidate function not viable: 'this' object is in address space '__constant', but method expects object in address space '__generic'}} //expected-note{{conversion candidate of type 'void (*)()'}} const2(); //expected-error{{no matching function fo
[PATCH] D71111: [Sema] Improve diagnostic about addr spaces for overload candidates
Anastasia created this revision. Anastasia added a reviewer: rjmccall. Herald added a subscriber: ebevhan. As discussed in https://reviews.llvm.org/D69938#inline-629726 this commit improves the diagnostic of addr spaces. The approach is currently reusing diagnostic streaming of `Qualifiers`. There are a number of issues however: 1. Address spaces don't always have representation i.e. in C++ it is just a number or `Default` address space doesn't correspond to anything at all. For the former case with the current approach we will get `'__attribute__((address_space(N)))'` printed into the diagnostic. For the latter one it will print `unqualified`. 2. In OpenCL we threat `__private` and `Default` in the same way and therefore it doesn't get printed. With this patch therefore `unqualified` will appear even if `__private` was specified in the original source. There is a bug open to fix that however: https://bugs.llvm.org/show_bug.cgi?id=43295. Perhaps it should be fixed as soon as this gets committed. https://reviews.llvm.org/D7 Files: clang/include/clang/Basic/DiagnosticSemaKinds.td clang/lib/Sema/SemaOverload.cpp clang/test/SemaCXX/address-space-references.cpp clang/test/SemaOpenCL/address-spaces-conversions-cl2.0.cl clang/test/SemaOpenCLCXX/address-space-lambda.cl clang/test/SemaOpenCLCXX/address-space-of-this-class-scope.cl Index: clang/test/SemaOpenCLCXX/address-space-of-this-class-scope.cl === --- clang/test/SemaOpenCLCXX/address-space-of-this-class-scope.cl +++ clang/test/SemaOpenCLCXX/address-space-of-this-class-scope.cl @@ -7,8 +7,8 @@ }; void bar(__local C*); -// expected-note@-1{{candidate function not viable: address space mismatch in 1st argument ('decltype(this)' (aka '__global C *')), parameter type must be '__local C *'}} -// expected-note@-2{{candidate function not viable: address space mismatch in 1st argument ('decltype(this)' (aka 'C *')), parameter type must be '__local C *'}} +// expected-note@-1{{candidate function not viable: cannot convert address spaces in 1st argument ('decltype(this)' (aka '__global C *')) from '__global' to '__local'}} +// expected-note@-2{{candidate function not viable: cannot convert address spaces in 1st argument ('decltype(this)' (aka 'C *')) from unqualified to '__local'}} __global C Glob; void foo(){ Index: clang/test/SemaOpenCLCXX/address-space-lambda.cl === --- clang/test/SemaOpenCLCXX/address-space-lambda.cl +++ clang/test/SemaOpenCLCXX/address-space-lambda.cl @@ -12,7 +12,7 @@ // Test lambda with default parameters //CHECK: CXXMethodDecl {{.*}} constexpr operator() 'void () const __generic' [&] {i++;} (); - __constant auto err = [&]() {}; //expected-note-re{{candidate function not viable: address space mismatch in 'this' argument ('__constant (lambda at {{.*}})'), parameter type must be 'const __generic (lambda at {{.*}})'}} + __constant auto err = [&]() {}; //expected-note-re{{candidate function not viable: cannot convert address spaces in 'this' argument ('__constant (lambda at {{.*}}') from '__constant' to '__generic'}} err(); //expected-error-re{{no matching function for call to object of type '__constant (lambda at {{.*}})'}} // FIXME: There is very limited addr space functionality // we can test when taking lambda type from the object. Index: clang/test/SemaOpenCL/address-spaces-conversions-cl2.0.cl === --- clang/test/SemaOpenCL/address-spaces-conversions-cl2.0.cl +++ clang/test/SemaOpenCL/address-spaces-conversions-cl2.0.cl @@ -42,7 +42,7 @@ #if !__OPENCL_CPP_VERSION__ // expected-note@-3{{passing argument to parameter 'arg_glob' here}} #else -// expected-note-re@-5{{candidate function not viable: address space mismatch in 1st argument ('__{{generic|constant}} int *'), parameter type must be '__global int *'}} +// expected-note-re@-5{{candidate function not viable: cannot convert address spaces in 1st argument ('__{{generic|constant}} int *') from '__{{generic|constant}}' to '__global'}} #endif #endif @@ -50,7 +50,7 @@ #if !__OPENCL_CPP_VERSION__ // expected-note@-2{{passing argument to parameter 'arg_loc' here}} #else -// expected-note-re@-4{{candidate function not viable: address space mismatch in 1st argument ('__{{global|generic|constant}} int *'), parameter type must be '__local int *'}} +// expected-note-re@-4{{candidate function not viable: cannot convert address spaces in 1st argument ('__{{global|generic|constant}} int *') from '__{{global|generic|constant}}' to '__local'}} #endif void f_const(__constant int *arg_const) {} @@ -58,7 +58,7 @@ #if !__OPENCL_CPP_VERSION__ // expected-note@-3{{passing argument to parameter 'arg_const' here}} #else -// expected-note-re@-5{{candidate function not viable: address space mismatch in 1st argument ('__{{global|gen