r348927 - [OpenCL] Add generic AS to 'this' pointer
Author: mikael Date: Wed Dec 12 06:11:59 2018 New Revision: 348927 URL: http://llvm.org/viewvc/llvm-project?rev=348927&view=rev Log: [OpenCL] Add generic AS to 'this' pointer Address spaces are cast into generic before invoking the constructor. Added support for a trailing Qualifiers object in FunctionProtoType. Differential Revision: https://reviews.llvm.org/D54862 Added: cfe/trunk/test/CodeGenOpenCLCXX/addrspace-of-this.cl Modified: cfe/trunk/include/clang/AST/CanonicalType.h cfe/trunk/include/clang/AST/DeclCXX.h cfe/trunk/include/clang/AST/Type.h cfe/trunk/include/clang/Sema/Sema.h cfe/trunk/lib/AST/ASTContext.cpp cfe/trunk/lib/AST/ASTDumper.cpp cfe/trunk/lib/AST/DeclCXX.cpp cfe/trunk/lib/AST/ItaniumMangle.cpp cfe/trunk/lib/AST/MicrosoftMangle.cpp cfe/trunk/lib/AST/Type.cpp cfe/trunk/lib/AST/TypePrinter.cpp cfe/trunk/lib/CodeGen/CGCall.cpp cfe/trunk/lib/CodeGen/CGClass.cpp cfe/trunk/lib/CodeGen/CGDebugInfo.cpp cfe/trunk/lib/CodeGen/CGDeclCXX.cpp cfe/trunk/lib/CodeGen/CGExpr.cpp cfe/trunk/lib/CodeGen/CGValue.h cfe/trunk/lib/Index/USRGeneration.cpp cfe/trunk/lib/Parse/ParseCXXInlineMethods.cpp cfe/trunk/lib/Parse/ParseDecl.cpp cfe/trunk/lib/Parse/ParseOpenMP.cpp cfe/trunk/lib/Sema/SemaCodeComplete.cpp cfe/trunk/lib/Sema/SemaDecl.cpp cfe/trunk/lib/Sema/SemaDeclCXX.cpp cfe/trunk/lib/Sema/SemaExpr.cpp cfe/trunk/lib/Sema/SemaExprCXX.cpp cfe/trunk/lib/Sema/SemaLambda.cpp cfe/trunk/lib/Sema/SemaOverload.cpp cfe/trunk/lib/Sema/SemaTemplate.cpp cfe/trunk/lib/Sema/SemaTemplateDeduction.cpp cfe/trunk/lib/Sema/SemaTemplateInstantiate.cpp cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp cfe/trunk/lib/Sema/SemaType.cpp cfe/trunk/lib/Sema/TreeTransform.h cfe/trunk/lib/Serialization/ASTReader.cpp cfe/trunk/lib/Serialization/ASTWriter.cpp cfe/trunk/test/CodeGenOpenCLCXX/template-address-spaces.cl cfe/trunk/test/SemaOpenCLCXX/address-space-templates.cl cfe/trunk/tools/libclang/CIndex.cpp Modified: cfe/trunk/include/clang/AST/CanonicalType.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/CanonicalType.h?rev=348927&r1=348926&r2=348927&view=diff == --- cfe/trunk/include/clang/AST/CanonicalType.h (original) +++ cfe/trunk/include/clang/AST/CanonicalType.h Wed Dec 12 06:11:59 2018 @@ -510,7 +510,7 @@ struct CanProxyAdaptor; Modified: cfe/trunk/include/clang/AST/DeclCXX.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclCXX.h?rev=348927&r1=348926&r2=348927&view=diff == --- cfe/trunk/include/clang/AST/DeclCXX.h (original) +++ cfe/trunk/include/clang/AST/DeclCXX.h Wed Dec 12 06:11:59 2018 @@ -2182,7 +2182,10 @@ public: /// 'this' type. QualType getThisType(ASTContext &C) const; - unsigned getTypeQualifiers() const { + static QualType getThisType(const FunctionProtoType *FPT, + const CXXRecordDecl *Decl); + + Qualifiers getTypeQualifiers() const { return getType()->getAs()->getTypeQuals(); } Modified: cfe/trunk/include/clang/AST/Type.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Type.h?rev=348927&r1=348926&r2=348927&view=diff == --- cfe/trunk/include/clang/AST/Type.h (original) +++ cfe/trunk/include/clang/AST/Type.h Wed Dec 12 06:11:59 2018 @@ -256,28 +256,24 @@ public: } bool hasConst() const { return Mask & Const; } - void setConst(bool flag) { -Mask = (Mask & ~Const) | (flag ? Const : 0); - } + bool hasOnlyConst() const { return Mask == Const; } void removeConst() { Mask &= ~Const; } void addConst() { Mask |= Const; } bool hasVolatile() const { return Mask & Volatile; } - void setVolatile(bool flag) { -Mask = (Mask & ~Volatile) | (flag ? Volatile : 0); - } + bool hasOnlyVolatile() const { return Mask == Volatile; } void removeVolatile() { Mask &= ~Volatile; } void addVolatile() { Mask |= Volatile; } bool hasRestrict() const { return Mask & Restrict; } - void setRestrict(bool flag) { -Mask = (Mask & ~Restrict) | (flag ? Restrict : 0); - } + bool hasOnlyRestrict() const { return Mask == Restrict; } void removeRestrict() { Mask &= ~Restrict; } void addRestrict() { Mask |= Restrict; } bool hasCVRQualifiers() const { return getCVRQualifiers(); } unsigned getCVRQualifiers() const { return Mask & CVRMask; } + unsigned getCVRUQualifiers() const { return Mask & (CVRMask | UMask); } + void setCVRQualifiers(unsigned mask) { assert(!(mask & ~CVRMask) && "bitmask contains non-CVR bits"); Mask = (Mask & ~CVRMask) | mask; @@ -1526,7 +1522,9 @@ protected: /// /// C++ 8.3.5p4: The return type, the parameter type list and the /// cv-qualifier
r348931 - Revert "[OpenCL] Add generic AS to 'this' pointer"
Author: mikael Date: Wed Dec 12 07:06:16 2018 New Revision: 348931 URL: http://llvm.org/viewvc/llvm-project?rev=348931&view=rev Log: Revert "[OpenCL] Add generic AS to 'this' pointer" Reverting because the patch broke lldb. Removed: cfe/trunk/test/CodeGenOpenCLCXX/addrspace-of-this.cl Modified: cfe/trunk/include/clang/AST/CanonicalType.h cfe/trunk/include/clang/AST/DeclCXX.h cfe/trunk/include/clang/AST/Type.h cfe/trunk/include/clang/Sema/Sema.h cfe/trunk/lib/AST/ASTContext.cpp cfe/trunk/lib/AST/ASTDumper.cpp cfe/trunk/lib/AST/DeclCXX.cpp cfe/trunk/lib/AST/ItaniumMangle.cpp cfe/trunk/lib/AST/MicrosoftMangle.cpp cfe/trunk/lib/AST/Type.cpp cfe/trunk/lib/AST/TypePrinter.cpp cfe/trunk/lib/CodeGen/CGCall.cpp cfe/trunk/lib/CodeGen/CGClass.cpp cfe/trunk/lib/CodeGen/CGDebugInfo.cpp cfe/trunk/lib/CodeGen/CGDeclCXX.cpp cfe/trunk/lib/CodeGen/CGExpr.cpp cfe/trunk/lib/CodeGen/CGValue.h cfe/trunk/lib/Index/USRGeneration.cpp cfe/trunk/lib/Parse/ParseCXXInlineMethods.cpp cfe/trunk/lib/Parse/ParseDecl.cpp cfe/trunk/lib/Parse/ParseOpenMP.cpp cfe/trunk/lib/Sema/SemaCodeComplete.cpp cfe/trunk/lib/Sema/SemaDecl.cpp cfe/trunk/lib/Sema/SemaDeclCXX.cpp cfe/trunk/lib/Sema/SemaExpr.cpp cfe/trunk/lib/Sema/SemaExprCXX.cpp cfe/trunk/lib/Sema/SemaLambda.cpp cfe/trunk/lib/Sema/SemaOverload.cpp cfe/trunk/lib/Sema/SemaTemplate.cpp cfe/trunk/lib/Sema/SemaTemplateDeduction.cpp cfe/trunk/lib/Sema/SemaTemplateInstantiate.cpp cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp cfe/trunk/lib/Sema/SemaType.cpp cfe/trunk/lib/Sema/TreeTransform.h cfe/trunk/lib/Serialization/ASTReader.cpp cfe/trunk/lib/Serialization/ASTWriter.cpp cfe/trunk/test/CodeGenOpenCLCXX/template-address-spaces.cl cfe/trunk/test/SemaOpenCLCXX/address-space-templates.cl cfe/trunk/tools/libclang/CIndex.cpp Modified: cfe/trunk/include/clang/AST/CanonicalType.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/CanonicalType.h?rev=348931&r1=348930&r2=348931&view=diff == --- cfe/trunk/include/clang/AST/CanonicalType.h (original) +++ cfe/trunk/include/clang/AST/CanonicalType.h Wed Dec 12 07:06:16 2018 @@ -510,7 +510,7 @@ struct CanProxyAdaptor; Modified: cfe/trunk/include/clang/AST/DeclCXX.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclCXX.h?rev=348931&r1=348930&r2=348931&view=diff == --- cfe/trunk/include/clang/AST/DeclCXX.h (original) +++ cfe/trunk/include/clang/AST/DeclCXX.h Wed Dec 12 07:06:16 2018 @@ -2182,10 +2182,7 @@ public: /// 'this' type. QualType getThisType(ASTContext &C) const; - static QualType getThisType(const FunctionProtoType *FPT, - const CXXRecordDecl *Decl); - - Qualifiers getTypeQualifiers() const { + unsigned getTypeQualifiers() const { return getType()->getAs()->getTypeQuals(); } Modified: cfe/trunk/include/clang/AST/Type.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Type.h?rev=348931&r1=348930&r2=348931&view=diff == --- cfe/trunk/include/clang/AST/Type.h (original) +++ cfe/trunk/include/clang/AST/Type.h Wed Dec 12 07:06:16 2018 @@ -256,24 +256,28 @@ public: } bool hasConst() const { return Mask & Const; } - bool hasOnlyConst() const { return Mask == Const; } + void setConst(bool flag) { +Mask = (Mask & ~Const) | (flag ? Const : 0); + } void removeConst() { Mask &= ~Const; } void addConst() { Mask |= Const; } bool hasVolatile() const { return Mask & Volatile; } - bool hasOnlyVolatile() const { return Mask == Volatile; } + void setVolatile(bool flag) { +Mask = (Mask & ~Volatile) | (flag ? Volatile : 0); + } void removeVolatile() { Mask &= ~Volatile; } void addVolatile() { Mask |= Volatile; } bool hasRestrict() const { return Mask & Restrict; } - bool hasOnlyRestrict() const { return Mask == Restrict; } + void setRestrict(bool flag) { +Mask = (Mask & ~Restrict) | (flag ? Restrict : 0); + } void removeRestrict() { Mask &= ~Restrict; } void addRestrict() { Mask |= Restrict; } bool hasCVRQualifiers() const { return getCVRQualifiers(); } unsigned getCVRQualifiers() const { return Mask & CVRMask; } - unsigned getCVRUQualifiers() const { return Mask & (CVRMask | UMask); } - void setCVRQualifiers(unsigned mask) { assert(!(mask & ~CVRMask) && "bitmask contains non-CVR bits"); Mask = (Mask & ~CVRMask) | mask; @@ -1522,9 +1526,7 @@ protected: /// /// C++ 8.3.5p4: The return type, the parameter type list and the /// cv-qualifier-seq, [...], are part of the function type. -unsigned FastTypeQuals : Qualifiers::FastWidth; -/// Whether this function has extended Qua
r349019 - [OpenCL] Add generic AS to 'this' pointer
Author: mikael Date: Thu Dec 13 02:15:27 2018 New Revision: 349019 URL: http://llvm.org/viewvc/llvm-project?rev=349019&view=rev Log: [OpenCL] Add generic AS to 'this' pointer Address spaces are cast into generic before invoking the constructor. Added support for a trailing Qualifiers object in FunctionProtoType. Note: This recommits the previously reverted patch, but now it is commited together with a fix for lldb. Differential Revision: https://reviews.llvm.org/D54862 Added: cfe/trunk/test/CodeGenOpenCLCXX/addrspace-of-this.cl Modified: cfe/trunk/include/clang/AST/CanonicalType.h cfe/trunk/include/clang/AST/DeclCXX.h cfe/trunk/include/clang/AST/Type.h cfe/trunk/include/clang/Sema/Sema.h cfe/trunk/lib/AST/ASTContext.cpp cfe/trunk/lib/AST/ASTDumper.cpp cfe/trunk/lib/AST/DeclCXX.cpp cfe/trunk/lib/AST/ItaniumMangle.cpp cfe/trunk/lib/AST/MicrosoftMangle.cpp cfe/trunk/lib/AST/Type.cpp cfe/trunk/lib/AST/TypePrinter.cpp cfe/trunk/lib/CodeGen/CGCall.cpp cfe/trunk/lib/CodeGen/CGClass.cpp cfe/trunk/lib/CodeGen/CGDebugInfo.cpp cfe/trunk/lib/CodeGen/CGDeclCXX.cpp cfe/trunk/lib/CodeGen/CGExpr.cpp cfe/trunk/lib/CodeGen/CGValue.h cfe/trunk/lib/Index/USRGeneration.cpp cfe/trunk/lib/Parse/ParseCXXInlineMethods.cpp cfe/trunk/lib/Parse/ParseDecl.cpp cfe/trunk/lib/Parse/ParseOpenMP.cpp cfe/trunk/lib/Sema/SemaCodeComplete.cpp cfe/trunk/lib/Sema/SemaDecl.cpp cfe/trunk/lib/Sema/SemaDeclCXX.cpp cfe/trunk/lib/Sema/SemaExpr.cpp cfe/trunk/lib/Sema/SemaExprCXX.cpp cfe/trunk/lib/Sema/SemaLambda.cpp cfe/trunk/lib/Sema/SemaOverload.cpp cfe/trunk/lib/Sema/SemaTemplate.cpp cfe/trunk/lib/Sema/SemaTemplateDeduction.cpp cfe/trunk/lib/Sema/SemaTemplateInstantiate.cpp cfe/trunk/lib/Sema/SemaTemplateInstantiateDecl.cpp cfe/trunk/lib/Sema/SemaType.cpp cfe/trunk/lib/Sema/TreeTransform.h cfe/trunk/lib/Serialization/ASTReader.cpp cfe/trunk/lib/Serialization/ASTWriter.cpp cfe/trunk/test/CodeGenOpenCLCXX/template-address-spaces.cl cfe/trunk/test/SemaOpenCLCXX/address-space-templates.cl cfe/trunk/tools/libclang/CIndex.cpp Modified: cfe/trunk/include/clang/AST/CanonicalType.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/CanonicalType.h?rev=349019&r1=349018&r2=349019&view=diff == --- cfe/trunk/include/clang/AST/CanonicalType.h (original) +++ cfe/trunk/include/clang/AST/CanonicalType.h Thu Dec 13 02:15:27 2018 @@ -510,7 +510,7 @@ struct CanProxyAdaptor; Modified: cfe/trunk/include/clang/AST/DeclCXX.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclCXX.h?rev=349019&r1=349018&r2=349019&view=diff == --- cfe/trunk/include/clang/AST/DeclCXX.h (original) +++ cfe/trunk/include/clang/AST/DeclCXX.h Thu Dec 13 02:15:27 2018 @@ -2182,7 +2182,10 @@ public: /// 'this' type. QualType getThisType(ASTContext &C) const; - unsigned getTypeQualifiers() const { + static QualType getThisType(const FunctionProtoType *FPT, + const CXXRecordDecl *Decl); + + Qualifiers getTypeQualifiers() const { return getType()->getAs()->getTypeQuals(); } Modified: cfe/trunk/include/clang/AST/Type.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Type.h?rev=349019&r1=349018&r2=349019&view=diff == --- cfe/trunk/include/clang/AST/Type.h (original) +++ cfe/trunk/include/clang/AST/Type.h Thu Dec 13 02:15:27 2018 @@ -256,28 +256,24 @@ public: } bool hasConst() const { return Mask & Const; } - void setConst(bool flag) { -Mask = (Mask & ~Const) | (flag ? Const : 0); - } + bool hasOnlyConst() const { return Mask == Const; } void removeConst() { Mask &= ~Const; } void addConst() { Mask |= Const; } bool hasVolatile() const { return Mask & Volatile; } - void setVolatile(bool flag) { -Mask = (Mask & ~Volatile) | (flag ? Volatile : 0); - } + bool hasOnlyVolatile() const { return Mask == Volatile; } void removeVolatile() { Mask &= ~Volatile; } void addVolatile() { Mask |= Volatile; } bool hasRestrict() const { return Mask & Restrict; } - void setRestrict(bool flag) { -Mask = (Mask & ~Restrict) | (flag ? Restrict : 0); - } + bool hasOnlyRestrict() const { return Mask == Restrict; } void removeRestrict() { Mask &= ~Restrict; } void addRestrict() { Mask |= Restrict; } bool hasCVRQualifiers() const { return getCVRQualifiers(); } unsigned getCVRQualifiers() const { return Mask & CVRMask; } + unsigned getCVRUQualifiers() const { return Mask & (CVRMask | UMask); } + void setCVRQualifiers(unsigned mask) { assert(!(mask & ~CVRMask) && "bitmask contains non-CVR bits"); Mask = (Mask & ~CVRMask) | mask; @@ -1526,7 +1522,9 @@