zahiraam marked an inline comment as done.
zahiraam added a comment.

In D146148#4221651 <https://reviews.llvm.org/D146148#4221651>, @rjmccall wrote:

> In D146148#4220591 <https://reviews.llvm.org/D146148#4220591>, @zahiraam 
> wrote:
>
>> In D146148#4220495 <https://reviews.llvm.org/D146148#4220495>, 
>> @aaron.ballman wrote:
>>
>>> In D146148#4220433 <https://reviews.llvm.org/D146148#4220433>, @zahiraam 
>>> wrote:
>>>
>>>> In D146148#4220268 <https://reviews.llvm.org/D146148#4220268>, @rjmccall 
>>>> wrote:
>>>>
>>>>> Okay, so modifying `math.h` to use this attribute is acceptable?  That's 
>>>>> great, that's definitely the best outcome for the compiler.
>>>>>
>>>>> Just a minor request about the diagnostic name, but otherwise LGTM.
>>>>
>>>> Yes. Added the attribute inside the included math.h header file.
>>>
>>> How does this work for, say, glibc, musl, or MSVC CRT? Won't those math.h 
>>> headers lack the attribute and thus run into problems when used with Clang?
>>
>> Good point! @rjmccall are you thinking of something in particular with the 
>> attribute?
>
> Zahira, this is what I was asking you when I asked whether modifying the 
> math.h header was acceptable: whether you were prepared to accept that the 
> warning would only fire on system math.h headers that we'd modified, or 
> whether you cared about making it work with non-cooperative headers.  I 
> wasn't asking if you were willing to change the test code.
>
>> If not I guess we will have to rely on string comparison for all the typedef 
>> in the TU. Aaron pointed out the compile time overhead.
>
> Well, the compile-time overhead of doing this on every typedef *declaration* 
> is way better than the overhead of doing this on every type lookup, at least.
>
> Anyway, there are three possibilities I can see:
>
> - We accept that this needs cooperative system headers.
> - We add a math.h compiler header that `#include_next`s the system math.h and 
> then adds the attribute.  I believe you can just add an attribute to a 
> typedef retroactively with something like `typedef float_t float_t 
> __attribute__((whatever))`.
> - We do checks on every typedef declaration.  There's a builtin-identifier 
> trick that we do with library functions that we should be able to generalize 
> to typedefs, so you wouldn't need to actually do string comparisons, you'd 
> just check whether the `IdentifierInfo*` was storing a special ID.  We'd set 
> that up in `initializeBuiltins` at the start of the translation unit, so the 
> overhead would just be that we'd create two extra `IdentifierInfo*`s in every 
> TU.
>
> The builtin ID logic is currently specific to builtin *functions*, and I 
> don't think we'd want to hack typedef names into that.  But the same storage 
> in `IdentifierInfo*` is also used for identifying the ObjC context-sensitive 
> keywords, by just offsetting the builtin IDs by the NUM_OBJC_KEYWORD.  You 
> should be able to generalize that by also introducing a concept of a builtin 
> *type* name, so that e.g. IDs in [0,NUM_OBJC_KEYWORDS) are ObjCKeywordKinds, 
> IDs in [NUM_OBJC_KEYWORDS, NUM_OBJC_KEYWORDS+NUM_BUILTIN_TYPES) are 
> BuiltinTypeKinds (when you subtract NUM_OBJC_KEYWORDS), and IDs in 
> [NUM_OBJC_KEYWORDS+NUM_BUILTIN_TYPES,∞) are builtin function IDs (when you 
> subtract NUM_OBJC_KEYWORDS+NUM_BUILTIN_TYPES).

Reading this more carefully... Does that mean that we initialize the float_t, 
double_t in initializeBuiltins  even if they are not used in the source code?
Also not sure how to define the NUM_BUILTIN_TYPES since I don't need to add it 
to TokenKinds.h? I was proposing to do something like this:
enum InterestingIdentifierKind {
#define Interesting_Identifier(X) X,
#include "clang/Basic/TokenKinds.def"

  NUM_INTERESTING_IDENTIFIERS

};
But I guess I don't need since we don't want to add additional storage. Do I 
understand things correctly?


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D146148/new/

https://reviews.llvm.org/D146148

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to