On Wed, Jan 22, 2014 at 04:03:29PM +0000, Fraser Cormack wrote:
> This patch allows clang to compile the "extern" storage class in OpenCL 1.2.
> 
> I've also added a test case for the issue.

Does clang only complain if you use extern with constant address space
variables?  Because it looks like extern is already handled in
DeclSpec::SetStorageClassSpec()

-Tom

> 
> Cheers,
> Fraser
> 
> -- 
> Fraser Cormack
> Compiler Developer
> Codeplay Software Ltd
> 45 York Place, Edinburgh, EH1 3HP
> Tel: 0131 466 0503
> Fax: 0131 557 6600
> Website: http://www.codeplay.com
> Twitter: https://twitter.com/codeplaysoft
> 
> This email and any attachments may contain confidential and /or privileged 
> information and  is for use  by the addressee only. If you are not the 
> intended recipient, please notify Codeplay Software Ltd immediately and 
> delete the message from your computer. You may not copy or forward it,or use 
> or disclose its contents to any other person. Any views or other information 
> in this message which do not relate to our business are not authorized by 
> Codeplay software Ltd, nor does this message form part of any contract unless 
> so stated.
> As internet communications are capable of data corruption Codeplay Software 
> Ltd does not accept any responsibility for any changes made to this message 
> after it was sent. Please note that Codeplay Software Ltd does not accept any 
> liability or responsibility for viruses and it is your responsibility to scan 
> any attachments.
> Company registered in England and Wales, number: 04567874
> Registered office: 81 Linkfield Street, Redhill RH1 6BY
> 

> Index: lib/Sema/SemaDecl.cpp
> ===================================================================
> --- lib/Sema/SemaDecl.cpp     (revision 199802)
> +++ lib/Sema/SemaDecl.cpp     (working copy)
> @@ -8541,7 +8541,7 @@
>      // be initialized.
>      if (!Var->isInvalidDecl() &&
>          Var->getType().getAddressSpace() == LangAS::opencl_constant &&
> -        !Var->getInit()) {
> +        Var->getStorageClass() != SC_Extern && !Var->getInit()) {
>        Diag(Var->getLocation(), diag::err_opencl_constant_no_init);
>        Var->setInvalidDecl();
>        return;
> Index: test/SemaOpenCL/extern.cl
> ===================================================================
> --- test/SemaOpenCL/extern.cl (revision 0)
> +++ test/SemaOpenCL/extern.cl (working copy)
> @@ -0,0 +1,8 @@
> +// RUN: %clang_cc1 %s -cl-std=CL1.2 -verify -fsyntax-only
> +// expected-no-diagnostics
> +
> +extern constant float foo;
> +
> +kernel void test(global float* buf) {
> +  buf[0] += foo;
> +}

> _______________________________________________
> cfe-commits mailing list
> [email protected]
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to