[cfe-commits] [PATCH] Rejecting forbidden storage class specifiers in OpenCL
Peter Collingbourne
peter at pcc.me.uk
Mon Dec 6 12:00:15 PST 2010
Hi George,
On Mon, Nov 29, 2010 at 11:15:26PM +0100, George Russell wrote:
> The OpenCL specification states that the storage class specifiers
> "extern","auto","static", and "register" are prohibited (in section
> 6.8.g, Restrictions).
>
> This patch adds diagnostics for each of these, when the OpenCL
> language is selected, and a test case.
>
> Feedback?
A few points:
The test should be moved to Sema (in DeclSpec::SetStorageClassSpec).
This will decrease code repetition, and Sema seems a more logical
place to perform the test.
We should forbid __private_extern__ also, I think. While this storage
class is not mentioned in the OpenCL spec, it isn't in C99 either,
and doesn't make sense for OpenCL.
You should add the .cl extension to test/lit.cfg or the test case
will never run. Also, our parser tests tend to use -fsyntax-only
(which causes only the parser and semantic analysis to run).
A single parametrised diagnostic would be better than one for each
storage class, as this decreases repetition as well as burden on
translators (if/when we get i18n support).
Less important: your code applies the storage-class specifier even
if it is prohibited, which doesn't seem right to me -- if we were
to downgrade this diagnostic to a warning, the resulting AST should
still be valid.
Thanks,
--
Peter
More information about the cfe-commits
mailing list