[cfe-commits] [PATCH] fix shifts that are defined in OpenCL but not in C99, etc

Jordan Rose jordan_rose at apple.com
Fri Dec 21 09:13:03 PST 2012


I don't have much context here, but it seems like the warnings are still valid in OpenCL (because of the surprise factor); they might just be off by default. Or, since we don't like off-by-default warnings, they would at least have different warning text to make it clear that it's not undefined behavior, just something the programmer might not expect.


On Dec 21, 2012, at 0:27 , David Tweed <david.tweed at arm.com> wrote:

> Hi,
> 
> One of the corner cases for C family languages is shifts (<< and >>) where the shift size is not with 0 to "word width". In C99 (and I think most other C variants) these are undefined while OpenCL defines the meaning to be along the lines of "integer promote shift variable as required, promote the shift amount the same way and use the bottom promoted-type-width bits as the shift amount" (this applies even if the shift amount is originally a negative number). (Full technical description is in section 6.3j of OpenCL spec.) This patch implements two parts to this; actually generating the IR in clang is straightforward. The difficult bit is the front-end semantic diagnostics when values are known statically. If in OpenCL I something expands to "1<<37" or "1<<(-4)" it's definitely a well defined program fargment, but should any judgement be made as to if it is likely to do what the programmer intended? At the moment I've taken the view that, particularly since Sema shouldn't actually change values by reducing the shift, it's not possible to generate meaningful warnings for this construct in OpenCL, so it returns before most of the bad shift checking in SemaExpr.cpp's DiagnoseBadShiftValues?
> 
> Could this be reviewed and then I'll commit it please?
> 
> Cheers,
> Dave
> 
> -- IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium.  Thank you.<shiftSize2.diff>_______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits





More information about the cfe-commits mailing list