@@ -1863,6 +1863,9 @@ static void printArguments(ASTContext &Ctx, raw_ostream &ArgOS,
1863
1863
ArrayRef<TemplateArgument> Args,
1864
1864
const PrintingPolicy &P);
1865
1865
1866
+ static std::string getKernelNameTypeString (QualType T, ASTContext &Ctx,
1867
+ const PrintingPolicy &TypePolicy);
1868
+
1866
1869
static void printArgument (ASTContext &Ctx, raw_ostream &ArgOS,
1867
1870
TemplateArgument Arg, const PrintingPolicy &P) {
1868
1871
switch (Arg.getKind ()) {
@@ -1888,8 +1891,7 @@ static void printArgument(ASTContext &Ctx, raw_ostream &ArgOS,
1888
1891
TypePolicy.SuppressTypedefs = true ;
1889
1892
TypePolicy.SuppressTagKeyword = true ;
1890
1893
QualType T = Arg.getAsType ();
1891
- QualType FullyQualifiedType = TypeName::getFullyQualifiedType (T, Ctx, true );
1892
- ArgOS << FullyQualifiedType.getAsString (TypePolicy);
1894
+ ArgOS << getKernelNameTypeString (T, Ctx, TypePolicy);
1893
1895
break ;
1894
1896
}
1895
1897
default :
@@ -1918,36 +1920,36 @@ static void printTemplateArguments(ASTContext &Ctx, raw_ostream &ArgOS,
1918
1920
ArgOS << " >" ;
1919
1921
}
1920
1922
1921
- static std::string getKernelNameTypeString (QualType T) {
1923
+ static std::string getKernelNameTypeString (QualType T, ASTContext &Ctx,
1924
+ const PrintingPolicy &TypePolicy) {
1925
+
1926
+ QualType FullyQualifiedType = TypeName::getFullyQualifiedType (T, Ctx, true );
1922
1927
1923
1928
const CXXRecordDecl *RD = T->getAsCXXRecordDecl ();
1924
1929
1925
1930
if (!RD)
1926
- return getCPPTypeString (T );
1931
+ return eraseAnonNamespace (FullyQualifiedType. getAsString (TypePolicy) );
1927
1932
1928
1933
// If kernel name type is a template specialization with enum type
1929
1934
// template parameters, enumerators in name type string should be
1930
1935
// replaced with their underlying value since the enum definition
1931
1936
// is not visible in integration header.
1932
1937
if (const auto *TSD = dyn_cast<ClassTemplateSpecializationDecl>(RD)) {
1933
- LangOptions LO;
1934
- PrintingPolicy P (LO);
1935
- P.SuppressTypedefs = true ;
1936
1938
SmallString<64 > Buf;
1937
1939
llvm::raw_svector_ostream ArgOS (Buf);
1938
1940
1939
1941
// Print template class name
1940
- TSD->printQualifiedName (ArgOS, P , /* WithGlobalNsPrefix*/ true );
1942
+ TSD->printQualifiedName (ArgOS, TypePolicy , /* WithGlobalNsPrefix*/ true );
1941
1943
1942
1944
// Print template arguments substituting enumerators
1943
1945
ASTContext &Ctx = RD->getASTContext ();
1944
1946
const TemplateArgumentList &Args = TSD->getTemplateArgs ();
1945
- printTemplateArguments (Ctx, ArgOS, Args.asArray (), P );
1947
+ printTemplateArguments (Ctx, ArgOS, Args.asArray (), TypePolicy );
1946
1948
1947
1949
return eraseAnonNamespace (ArgOS.str ().str ());
1948
1950
}
1949
1951
1950
- return getCPPTypeString (T );
1952
+ return eraseAnonNamespace (FullyQualifiedType. getAsString (TypePolicy) );
1951
1953
}
1952
1954
1953
1955
void SYCLIntegrationHeader::emit (raw_ostream &O) {
@@ -2066,9 +2068,11 @@ void SYCLIntegrationHeader::emit(raw_ostream &O) {
2066
2068
O << " ', '" << c;
2067
2069
O << " '> {\n " ;
2068
2070
} else {
2069
-
2071
+ LangOptions LO;
2072
+ PrintingPolicy P (LO);
2073
+ P.SuppressTypedefs = true ;
2070
2074
O << " template <> struct KernelInfo<"
2071
- << getKernelNameTypeString (K.NameType ) << " > {\n " ;
2075
+ << getKernelNameTypeString (K.NameType , S. getASTContext (), P ) << " > {\n " ;
2072
2076
}
2073
2077
O << " DLL_LOCAL\n " ;
2074
2078
O << " static constexpr const char* getName() { return \" " << K.Name
@@ -2137,8 +2141,9 @@ void SYCLIntegrationHeader::addSpecConstant(StringRef IDName, QualType IDType) {
2137
2141
}
2138
2142
2139
2143
SYCLIntegrationHeader::SYCLIntegrationHeader (DiagnosticsEngine &_Diag,
2140
- bool _UnnamedLambdaSupport)
2141
- : Diag(_Diag), UnnamedLambdaSupport(_UnnamedLambdaSupport) {}
2144
+ bool _UnnamedLambdaSupport,
2145
+ Sema &_S)
2146
+ : Diag(_Diag), UnnamedLambdaSupport(_UnnamedLambdaSupport), S(_S) {}
2142
2147
2143
2148
// -----------------------------------------------------------------------------
2144
2149
// Utility class methods
0 commit comments