[cfe-commits] [PATCH] Disassociate pragmas from IdentifierInfos
Argyrios Kyrtzidis
kyrtzidis at apple.com
Tue Jul 13 02:14:02 PDT 2010
On 13 Jul 2010, at 09:55, Douglas Gregor wrote:
>
> On Jul 13, 2010, at 12:57 AM, Argyrios Kyrtzidis wrote:
>
>> The attached patch modifies the pragma handlers to accept and use StringRefs instead of IdentifierInfos.
>>
>> When loading the PCH, IdentifierInfos that are associated with pragmas cause declarations that use these identifiers to be deserialized (e.g. the "clang" pragma causes the "clang" namespace to be loaded).
>> We can avoid this if we just use StringRefs for the pragmas.
>>
>> As a bonus, since we don't have to create and pass IdentifierInfos, the pragma interfaces get a bit more simplified.
>
>
> Good stuff. My only concern is that it's generally dangerous to hold on to StringRefs like this:
>
> @@ -33,12 +35,13 @@ namespace clang {
> /// we treat "#pragma STDC" and "#pragma GCC" as namespaces that contain other
> /// pragmas.
> class PragmaHandler {
> - const IdentifierInfo *Name;
> + llvm::StringRef Name;
>
> It works when the StrinRef refers to a string literal or some storage that lives longer than the pragma handler, but the latter is a trap waiting for someone. It would be better to either store a std::string in PragmaHandler or to eliminate the Name field altogether.
Good catch! I changed it to std::string and committed at r108237.
Thanks for reviewing!
-Argiris
More information about the cfe-commits
mailing list