[PATCH] D21698: [OpenCL] Allow disabling types and declarations associated with extensions
Anastasia Stulova via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Dec 12 08:04:22 PST 2016
Anastasia added inline comments.
================
Comment at: include/clang/Basic/DiagnosticSemaKinds.td:8127
"invalid prototype, variadic arguments are not allowed in OpenCL">;
+def err_requires_extension : Error<
+ "use of %select{declaration|type }0%1 requires %2 extension to be enabled">;
----------------
Could we rename err_requires_extension -> err_opencl_requires_extension
================
Comment at: lib/Parse/ParsePragma.cpp:461
+ };
+ typedef std::pair<const IdentifierInfo *, OpenCLExtState> OpenCLExtData;
}
----------------
yaxunl wrote:
> Anastasia wrote:
> > yaxunl wrote:
> > > Anastasia wrote:
> > > > Could we use PointerIntPair still but with 2 bits?
> > > Using PointerIntPair with 2 bits requires IdentifierInfo to be aligned at 4 bytes, however this is not true. IdentifierInfo has no explicit alignment specifier, therefore it can only hold 1 bit in PointerIntPair.
> > Based on its structure with having a pointer member I think it's reasonable to assume at least 4 bytes alignment... Although this doesn't seem to affect the performance anyways.
> You are right. The alignment of IdentifierInfo should be 8 on most systems.
>
> However in IdentifierTable.h there is
>
>
> ```
> // Provide PointerLikeTypeTraits for IdentifierInfo pointers, which
> // are not guaranteed to be 8-byte aligned.
> template<>
> class PointerLikeTypeTraits<clang::IdentifierInfo*> {
> public:
> static inline void *getAsVoidPointer(clang::IdentifierInfo* P) {
> return P;
> }
> static inline clang::IdentifierInfo *getFromVoidPointer(void *P) {
> return static_cast<clang::IdentifierInfo*>(P);
> }
> enum { NumLowBitsAvailable = 1 };
> };
>
> ```
> Due to the above code there is only 1 bit available for when using PointerIntPair with IdentifierInfo*. My guess is that alignment of IdentifierInfo is not 8 on certain systems so some one intentionally defined the above code to prevent using PointerIntPair with IdentifierInfo* for more than 1 bit.
>
Not too critical, but it's certainly not 8 byte aligned for 32 bit architectures. It should although be at least 4 bytes aligned in my opinion.
This code seems to be old, and the comment is not very precise to be honest.
================
Comment at: lib/Sema/Sema.cpp:1614
+ Decl = TagT->getDecl();
+ auto DL = OpenCLDeclExtMap.find(Decl);
+ if (DL != OpenCLDeclExtMap.end()) {
----------------
this bit (up to line 1623) seems to be repeated in multiple places... wondering if we could use a helper function instead perhaps with the templates?
================
Comment at: lib/Serialization/ASTReader.cpp:3170
+ OpenCLExtensions.OptMap[Name] = {
+ static_cast<bool>(Record[I++]),
+ static_cast<bool>(Record[I++]),
----------------
Can you put a comment explaining which element each line corresponds to?
https://reviews.llvm.org/D21698
More information about the cfe-commits
mailing list