@@ -1866,6 +1866,9 @@ static void printArguments(ASTContext &Ctx, raw_ostream &ArgOS,
1866
1866
ArrayRef<TemplateArgument> Args,
1867
1867
const PrintingPolicy &P);
1868
1868
1869
+ static std::string getKernelNameTypeString (QualType T, ASTContext &Ctx,
1870
+ const PrintingPolicy &TypePolicy);
1871
+
1869
1872
static void printArgument (ASTContext &Ctx, raw_ostream &ArgOS,
1870
1873
TemplateArgument Arg, const PrintingPolicy &P) {
1871
1874
switch (Arg.getKind ()) {
@@ -1891,8 +1894,7 @@ static void printArgument(ASTContext &Ctx, raw_ostream &ArgOS,
1891
1894
TypePolicy.SuppressTypedefs = true ;
1892
1895
TypePolicy.SuppressTagKeyword = true ;
1893
1896
QualType T = Arg.getAsType ();
1894
- QualType FullyQualifiedType = TypeName::getFullyQualifiedType (T, Ctx, true );
1895
- ArgOS << FullyQualifiedType.getAsString (TypePolicy);
1897
+ ArgOS << getKernelNameTypeString (T, Ctx, TypePolicy);
1896
1898
break ;
1897
1899
}
1898
1900
default :
@@ -1925,36 +1927,36 @@ static void printTemplateArguments(ASTContext &Ctx, raw_ostream &ArgOS,
1925
1927
ArgOS << " >" ;
1926
1928
}
1927
1929
1928
- static std::string getKernelNameTypeString (QualType T) {
1930
+ static std::string getKernelNameTypeString (QualType T, ASTContext &Ctx,
1931
+ const PrintingPolicy &TypePolicy) {
1932
+
1933
+ QualType FullyQualifiedType = TypeName::getFullyQualifiedType (T, Ctx, true );
1929
1934
1930
1935
const CXXRecordDecl *RD = T->getAsCXXRecordDecl ();
1931
1936
1932
1937
if (!RD)
1933
- return getCPPTypeString (T );
1938
+ return eraseAnonNamespace (FullyQualifiedType. getAsString (TypePolicy) );
1934
1939
1935
1940
// If kernel name type is a template specialization with enum type
1936
1941
// template parameters, enumerators in name type string should be
1937
1942
// replaced with their underlying value since the enum definition
1938
1943
// is not visible in integration header.
1939
1944
if (const auto *TSD = dyn_cast<ClassTemplateSpecializationDecl>(RD)) {
1940
- LangOptions LO;
1941
- PrintingPolicy P (LO);
1942
- P.SuppressTypedefs = true ;
1943
1945
SmallString<64 > Buf;
1944
1946
llvm::raw_svector_ostream ArgOS (Buf);
1945
1947
1946
1948
// Print template class name
1947
- TSD->printQualifiedName (ArgOS, P , /* WithGlobalNsPrefix*/ true );
1949
+ TSD->printQualifiedName (ArgOS, TypePolicy , /* WithGlobalNsPrefix*/ true );
1948
1950
1949
1951
// Print template arguments substituting enumerators
1950
1952
ASTContext &Ctx = RD->getASTContext ();
1951
1953
const TemplateArgumentList &Args = TSD->getTemplateArgs ();
1952
- printTemplateArguments (Ctx, ArgOS, Args.asArray (), P );
1954
+ printTemplateArguments (Ctx, ArgOS, Args.asArray (), TypePolicy );
1953
1955
1954
1956
return eraseAnonNamespace (ArgOS.str ().str ());
1955
1957
}
1956
1958
1957
- return getCPPTypeString (T );
1959
+ return eraseAnonNamespace (FullyQualifiedType. getAsString (TypePolicy) );
1958
1960
}
1959
1961
1960
1962
void SYCLIntegrationHeader::emit (raw_ostream &O) {
@@ -2073,9 +2075,11 @@ void SYCLIntegrationHeader::emit(raw_ostream &O) {
2073
2075
O << " ', '" << c;
2074
2076
O << " '> {\n " ;
2075
2077
} else {
2076
-
2078
+ LangOptions LO;
2079
+ PrintingPolicy P (LO);
2080
+ P.SuppressTypedefs = true ;
2077
2081
O << " template <> struct KernelInfo<"
2078
- << getKernelNameTypeString (K.NameType ) << " > {\n " ;
2082
+ << getKernelNameTypeString (K.NameType , S. getASTContext (), P ) << " > {\n " ;
2079
2083
}
2080
2084
O << " DLL_LOCAL\n " ;
2081
2085
O << " static constexpr const char* getName() { return \" " << K.Name
@@ -2144,8 +2148,9 @@ void SYCLIntegrationHeader::addSpecConstant(StringRef IDName, QualType IDType) {
2144
2148
}
2145
2149
2146
2150
SYCLIntegrationHeader::SYCLIntegrationHeader (DiagnosticsEngine &_Diag,
2147
- bool _UnnamedLambdaSupport)
2148
- : Diag(_Diag), UnnamedLambdaSupport(_UnnamedLambdaSupport) {}
2151
+ bool _UnnamedLambdaSupport,
2152
+ Sema &_S)
2153
+ : Diag(_Diag), UnnamedLambdaSupport(_UnnamedLambdaSupport), S(_S) {}
2149
2154
2150
2155
// -----------------------------------------------------------------------------
2151
2156
// Utility class methods
0 commit comments