Constant qualifier on typeof

Benedikt Huber benedikt.huber at gmail.com
Thu Feb 25 11:51:06 EST 2010


Hi Aaron,
>>> For instance, language-c will accept the following code already:
>>>
>>> typedef int foo;
>>> const foo y;
>>>
>>> though it's not immediately obvious to me where the const  
>>> qualifier gets recorded.
>> Oh, that's a misconception in the analysis.
>> What I can see is that
>> a) type qualifiers are dropped for typedefs (tDirectType)
>> b) type qualifiers are not allowed for typedefs (mergeTypeAttributes)
>>  c) attributes are dropped for direct types altogether
I took me far too long to find time to work on this, but I finally  
have a patch fixing these three issues. The patch affects quite a lot  
of code, but has been straightforward to implement. Anyway, I hope I  
did not introduce any errors.

Tue Feb 23 19:05:54 CET 2010  Benedikt Huber
   * Add type qualifiers and attributes to SemRep.Type

   aaron:
   >> For instance, language-c will accept the following code already:
   >>
   >> typedef int foo;
   >> const foo y;
   >>
   >> though it's not immediately obvious to me where the const  
qualifier gets recorded.
   benedikt:
   > Oh, that's a [bug] in the analysis:
   > a) type qualifiers are dropped for typedefs (tDirectType) [FIXED]
   > b) type qualifiers are not allowed for typedefs  
(mergeTypeAttributes) [FIXED]
   > c) attributes are dropped for direct types altogether [FIXED]

   Other than that, the changes were mostly straightforward, still I  
hope no new bugs have been introduced.
Tue Feb 23 23:06:12 CET 2010  benedikt.huber at gmail.com
   * Fix examples to include additional typequal/attribute fields of  
SemRep.Type

I'm curiuos, how do you use the type-checking code in the analysis  
library ? Do you use a patched version of language.c ?

cheers, benedikt

>>
>>> Does anyone else have a clear understanding of how this gets  
>>> processed? Would it be straightforward to refactor the code so  
>>> that both the typeof version and direct version of the code above  
>>> would result in the same internal type structure?
>> I know roughly what to do (modify SemRep/Type, adjust affected  
>> function like derefTypeDef, fix the two function mentioned above).
>> Do you think this is the best solution ? (plus all fixes needed  
>> elsewhere)
>>
>> 335c335
>> <        DirectType TypeName TypeQuals
>> ---
>>>       DirectType TypeName TypeQuals Attributes
>> 341c341
>> <      | FunctionType FunType
>> ---
>>>     | FunctionType FunType Attributes
>> 343c343
>> <      | TypeDefType TypeDefRef
>> ---
>>>     | TypeDefType TypeDefRef TypeQuals
>
> I'm happy with this solution if you are. I'd be happy to make the  
> change myself, or I can leave it to you if you prefer.
>
> Thanks,
> Aaron




More information about the Language-c mailing list