From: Borja F. <bor...@gm...> - 2012-03-19 18:10:58
|
Indeed __flash is a type qualifier just like const or volatile, the syntax you're all writing above is how it works. You can have an insane chain of pointers like __flash const int * const __flash * * const __flash * __flash ptr; and it's totally valid. The issue I'm talking about is, should __flash qualify a variable with a const aswell? As we discussed above i think it shouldn't. Anton, what you said in the last email is exactly what I think, as __flash is a type qualifier, check for constness and add errors if the user doesn't explicitly add them. But after all the usage is what you're all writing above. I like the idea of adding const because it really models how flash memory works, and as i said making __flash imply const is like cheating on the C language. But well, we're all here to discuss about it so it's not a closed decision in any sense. John thanks for the strings, I'll add them to my patch. If you want, once it is commited you can add further changes or add any additional hints. I still have to prepare the patch because I was waiting for this, I will split it in 2 parts, one for the clang side and another for llvm. Oh and if anybody else can think of any additional checks let me know, we should be here as robust as possible. 2012/3/19 John Myers <ato...@gm...> > > 1) Cannot write to flash memory. <-- emitted when trying to assign a value >> to a flash var >> > The error for a const being assigned a value is "error: read-only variable > is not assignable" so I would make the wording consistent and just do... > > "error: Flash variable is not assignable" ...or... > "error: __flash qualified variable is not assignable" > > >> 2) Flash variables are read only and should be declared with a const >> qualifier. <-- emitted when doing something like __flash int, we want >> __flash const int >> > > Something like the below and then also have one of those clang fix-it > hints showing const being added. > > "error: Flash variable requires const qualifier" > > 3) The pointee type of a flash pointer should be declared with a const >> qualifier. <-- i cant think of a better way of saying it, this is emitted >> when doing __flash int* ptr, we want __flash const int *ptr. >> > > I think this can be the same as or similar to #2 and again use the fix-it > hint to show explicitly where the const needs to be placed. > |