Skip to content

[SYCL] Add the 'cl' inline namespace to the integration footer- #3752

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
May 14, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 17 additions & 19 deletions clang/lib/Sema/SemaSYCL.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4655,8 +4655,8 @@ static void EmitSpecIdShims(raw_ostream &OS, unsigned &ShimCounter,
// function call parameters.
static std::string EmitSpecIdShims(raw_ostream &OS, unsigned &ShimCounter,
const VarDecl *VD) {
assert(VD->isInAnonymousNamespace() &&
"Function assumes this is in an anonymous namespace");
if (!VD->isInAnonymousNamespace())
return "";
std::string RelativeName = VD->getNameAsString();
EmitSpecIdShims(OS, ShimCounter, VD->getDeclContext(), RelativeName);
return RelativeName;
Expand All @@ -4673,30 +4673,28 @@ bool SYCLIntegrationFooter::emit(raw_ostream &OS) {
unsigned ShimCounter = 0;
for (const VarDecl *VD : SpecConstants) {
VD = VD->getCanonicalDecl();
std::string TopShim = EmitSpecIdShims(OS, ShimCounter, VD);
OS << "__SYCL_INLINE_NAMESPACE(cl) {\n";
OS << "namespace sycl {\n";
OS << "namespace detail {\n";
OS << "template<>\n";
OS << "inline const char *get_spec_constant_symbolic_ID<";

if (VD->isInAnonymousNamespace()) {
std::string TopShim = EmitSpecIdShims(OS, ShimCounter, VD);
OS << "namespace sycl {\n";
OS << "namespace detail {\n";
OS << "template<>\n";
OS << "inline const char *get_spec_constant_symbolic_ID<" << TopShim
<< ">() {\n";
OS << " return \"";
emitSpecIDName(OS, VD);
OS << "\";\n";
OS << TopShim;
} else {
OS << "namespace sycl {\n";
OS << "namespace detail {\n";
OS << "template<>\n";
OS << "inline const char *get_spec_constant_symbolic_ID<::";
OS << "::";
VD->printQualifiedName(OS, Policy);
OS << ">() {\n";
OS << " return \"";
emitSpecIDName(OS, VD);
OS << "\";\n";
}

OS << ">() {\n";
OS << " return \"";
emitSpecIDName(OS, VD);
OS << "\";\n";
OS << "}\n";
OS << "} // namespace detail\n";
OS << "} // namespace sycl\n";
OS << "} // __SYCL_INLINE_NAMESPACE(cl)\n";
}

OS << "#include <CL/sycl/detail/spec_const_integration.hpp>\n";
Expand Down
89 changes: 64 additions & 25 deletions clang/test/CodeGenSYCL/anonymous_integration_footer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,19 @@ using namespace cl;
// variable.
struct S1 {
static constexpr sycl::specialization_id a{1};
// CHECK: namespace sycl {
// CHECK: __SYCL_INLINE_NAMESPACE(cl) {
// CHECK-NEXT: namespace sycl {
// CHECK-NEXT: namespace detail {
// CHECK-NEXT: template<>
// CHECK-NEXT: inline const char *get_spec_constant_symbolic_ID<::S1::a>() {
// CHECK-NEXT: return "";
// CHECK-NEXT: }
// CHECK-NEXT: } // namespace detail
// CHECK-NEXT: } // namespace sycl
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
};
constexpr sycl::specialization_id b{2};
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
// CHECK-NEXT: namespace sycl {
// CHECK-NEXT: namespace detail {
// CHECK-NEXT: template<>
Expand All @@ -32,7 +35,9 @@ constexpr sycl::specialization_id b{2};
// CHECK-NEXT: }
// CHECK-NEXT: } // namespace detail
// CHECK-NEXT: } // namespace sycl
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
inline constexpr sycl::specialization_id c{3};
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
// CHECK-NEXT: namespace sycl {
// CHECK-NEXT: namespace detail {
// CHECK-NEXT: template<>
Expand All @@ -41,7 +46,9 @@ inline constexpr sycl::specialization_id c{3};
// CHECK-NEXT: }
// CHECK-NEXT: } // namespace detail
// CHECK-NEXT: } // namespace sycl
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
static constexpr sycl::specialization_id d{4};
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
// CHECK-NEXT: namespace sycl {
// CHECK-NEXT: namespace detail {
// CHECK-NEXT: template<>
Expand All @@ -50,6 +57,7 @@ static constexpr sycl::specialization_id d{4};
// CHECK-NEXT: }
// CHECK-NEXT: } // namespace detail
// CHECK-NEXT: } // namespace sycl
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)

namespace {
struct S2 {
Expand All @@ -61,14 +69,16 @@ struct S2 {
// CHECK-NEXT: }
// CHECK-NEXT: } // namespace __sycl_detail
// CHECK-NEXT: } // namespace
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
// CHECK-NEXT: namespace sycl {
// CHECK-NEXT: namespace detail {
// CHECK-NEXT: template<>
// CHECK-NEXT: inline const char *get_spec_constant_symbolic_ID<::__sycl_detail::__spec_id_shim_[[SHIM_ID]]()>() {
// CHECK-NEXT: return "";
// CHECK-NEXT: }
// CHECK-NEXT: // namespace detail
// CHECK-NEXT: // namespace sycl
// CHECK-NEXT: } // namespace detail
// CHECK-NEXT: } // namespace sycl
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
};
} // namespace

Expand All @@ -77,6 +87,7 @@ struct S3 {
static constexpr sycl::specialization_id a{Val};
};
template class S3<1>;
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
// CHECK-NEXT: namespace sycl {
// CHECK-NEXT: namespace detail {
// CHECK-NEXT: template<>
Expand All @@ -85,7 +96,9 @@ template class S3<1>;
// CHECK-NEXT: }
// CHECK-NEXT: } // namespace detail
// CHECK-NEXT: } // namespace sycl
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
template class S3<2>;
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
// CHECK-NEXT: namespace sycl {
// CHECK-NEXT: namespace detail {
// CHECK-NEXT: template<>
Expand All @@ -94,9 +107,11 @@ template class S3<2>;
// CHECK-NEXT: }
// CHECK-NEXT: } // namespace detail
// CHECK-NEXT: } // namespace sycl
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)

namespace inner {
constexpr sycl::specialization_id same_name{5};
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
// CHECK-NEXT: namespace sycl {
// CHECK-NEXT: namespace detail {
// CHECK-NEXT: template<>
Expand All @@ -105,8 +120,10 @@ constexpr sycl::specialization_id same_name{5};
// CHECK-NEXT: }
// CHECK-NEXT: } // namespace detail
// CHECK-NEXT: } // namespace sycl
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
}
constexpr sycl::specialization_id same_name{6};
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
// CHECK-NEXT: namespace sycl {
// CHECK-NEXT: namespace detail {
// CHECK-NEXT: template<>
Expand All @@ -115,6 +132,7 @@ constexpr sycl::specialization_id same_name{6};
// CHECK-NEXT: }
// CHECK-NEXT: } // namespace detail
// CHECK-NEXT: } // namespace sycl
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
namespace {
constexpr sycl::specialization_id same_name{7};
// CHECK-NEXT: namespace {
Expand All @@ -124,14 +142,16 @@ constexpr sycl::specialization_id same_name{7};
// CHECK-NEXT: }
// CHECK-NEXT: } // namespace __sycl_detail
// CHECK-NEXT: } // namespace
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
// CHECK-NEXT: namespace sycl {
// CHECK-NEXT: namespace detail {
// CHECK-NEXT: template<>
// CHECK-NEXT: inline const char *get_spec_constant_symbolic_ID<::__sycl_detail::__spec_id_shim_[[SHIM_ID]]()>() {
// CHECK-NEXT: return "";
// CHECK-NEXT: }
// CHECK-NEXT: // namespace detail
// CHECK-NEXT: // namespace sycl
// CHECK-NEXT: } // namespace detail
// CHECK-NEXT: } // namespace sycl
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
}
namespace {
namespace inner {
Expand All @@ -143,14 +163,16 @@ constexpr sycl::specialization_id same_name{8};
// CHECK-NEXT: }
// CHECK-NEXT: } // namespace __sycl_detail
// CHECK-NEXT: } // namespace
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
// CHECK-NEXT: namespace sycl {
// CHECK-NEXT: namespace detail {
// CHECK-NEXT: template<>
// CHECK-NEXT: inline const char *get_spec_constant_symbolic_ID<::__sycl_detail::__spec_id_shim_[[SHIM_ID]]()>() {
// CHECK-NEXT: return "";
// CHECK-NEXT: }
// CHECK-NEXT: // namespace detail
// CHECK-NEXT: // namespace sycl
// CHECK-NEXT: } // namespace detail
// CHECK-NEXT: } // namespace sycl
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
}
} // namespace
namespace inner {
Expand All @@ -165,27 +187,31 @@ constexpr sycl::specialization_id same_name{9};
// CHECK-NEXT: } // namespace __sycl_detail
// CHECK-NEXT: } // namespace
// CHECK-NEXT: } // namespace inner
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
// CHECK-NEXT: namespace sycl {
// CHECK-NEXT: namespace detail {
// CHECK-NEXT: template<>
// CHECK-NEXT: inline const char *get_spec_constant_symbolic_ID<::inner::__sycl_detail::__spec_id_shim_[[SHIM_ID]]()>() {
// CHECK-NEXT: return "";
// CHECK-NEXT: }
// CHECK-NEXT: // namespace detail
// CHECK-NEXT: // namespace sycl
// CHECK-NEXT: } // namespace detail
// CHECK-NEXT: } // namespace sycl
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
}
} // namespace inner

namespace outer {
constexpr sycl::specialization_id same_name{10};
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
// CHECK-NEXT: namespace sycl {
// CHECK-NEXT: namespace detail {
// CHECK-NEXT: template<>
// CHECK-NEXT: inline const char *get_spec_constant_symbolic_ID<::outer::same_name>() {
// CHECK-NEXT: return "";
// CHECK-NEXT: }
// CHECK-NEXT: // namespace detail
// CHECK-NEXT: // namespace sycl
// CHECK-NEXT: } // namespace detail
// CHECK-NEXT: } // namespace sycl
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
namespace {
constexpr sycl::specialization_id same_name{11};
// CHECK-NEXT: namespace outer {
Expand All @@ -197,14 +223,16 @@ constexpr sycl::specialization_id same_name{11};
// CHECK-NEXT: } // namespace __sycl_detail
// CHECK-NEXT: } // namespace
// CHECK-NEXT: } // namespace outer
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
// CHECK-NEXT: namespace sycl {
// CHECK-NEXT: namespace detail {
// CHECK-NEXT: template<>
// CHECK-NEXT: inline const char *get_spec_constant_symbolic_ID<::outer::__sycl_detail::__spec_id_shim_[[SHIM_ID]]()>() {
// CHECK-NEXT: return "";
// CHECK-NEXT: }
// CHECK-NEXT: // namespace detail
// CHECK-NEXT: // namespace sycl
// CHECK-NEXT: } // namespace detail
// CHECK-NEXT: } // namespace sycl
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)

namespace inner {
constexpr sycl::specialization_id same_name{12};
Expand All @@ -217,14 +245,16 @@ constexpr sycl::specialization_id same_name{12};
// CHECK-NEXT: } // namespace __sycl_detail
// CHECK-NEXT: } // namespace
// CHECK-NEXT: } // namespace outer
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
// CHECK-NEXT: namespace sycl {
// CHECK-NEXT: namespace detail {
// CHECK-NEXT: template<>
// CHECK-NEXT: inline const char *get_spec_constant_symbolic_ID<::outer::__sycl_detail::__spec_id_shim_[[SHIM_ID]]()>() {
// CHECK-NEXT: return "";
// CHECK-NEXT: }
// CHECK-NEXT: // namespace detail
// CHECK-NEXT: // namespace sycl
// CHECK-NEXT: } // namespace detail
// CHECK-NEXT: } // namespace sycl
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)

namespace {
// This has multiple anonymous namespaces in its declaration context, we need to
Expand Down Expand Up @@ -253,14 +283,16 @@ constexpr sycl::specialization_id same_name{13};
// CHECK-NEXT: } // namespace __sycl_detail
// CHECK-NEXT: } // namespace
// CHECK-NEXT: } // namespace outer
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
// CHECK-NEXT: namespace sycl {
// CHECK-NEXT: namespace detail {
// CHECK-NEXT: template<>
// CHECK-NEXT: inline const char *get_spec_constant_symbolic_ID<::outer::__sycl_detail::__spec_id_shim_[[SHIM_ID_2]]()>() {
// CHECK-NEXT: return "";
// CHECK-NEXT: }
// CHECK-NEXT: // namespace detail
// CHECK-NEXT: // namespace sycl
// CHECK-NEXT: } // namespace detail
// CHECK-NEXT: } // namespace sycl
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
}
} // namespace inner
} // namespace
Expand All @@ -276,14 +308,16 @@ constexpr sycl::specialization_id same_name{14};
// CHECK-NEXT: }
// CHECK-NEXT: } // namespace __sycl_detail
// CHECK-NEXT: } // namespace
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
// CHECK-NEXT: namespace sycl {
// CHECK-NEXT: namespace detail {
// CHECK-NEXT: template<>
// CHECK-NEXT: inline const char *get_spec_constant_symbolic_ID<::__sycl_detail::__spec_id_shim_[[SHIM_ID]]()>() {
// CHECK-NEXT: return "";
// CHECK-NEXT: }
// CHECK-NEXT: // namespace detail
// CHECK-NEXT: // namespace sycl
// CHECK-NEXT: } // namespace detail
// CHECK-NEXT: } // namespace sycl
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
namespace {
constexpr sycl::specialization_id same_name{15};
// CHECK-NEXT: namespace {
Expand All @@ -304,15 +338,16 @@ constexpr sycl::specialization_id same_name{15};
// CHECK-NEXT: }
// CHECK-NEXT: } // namespace __sycl_detail
// CHECK-NEXT: } // namespace

// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
// CHECK-NEXT: namespace sycl {
// CHECK-NEXT: namespace detail {
// CHECK-NEXT: template<>
// CHECK-NEXT: inline const char *get_spec_constant_symbolic_ID<::__sycl_detail::__spec_id_shim_[[SHIM_ID2]]()>() {
// CHECK-NEXT: return "";
// CHECK-NEXT: }
// CHECK-NEXT: // namespace detail
// CHECK-NEXT: // namespace sycl
// CHECK-NEXT: } // namespace detail
// CHECK-NEXT: } // namespace sycl
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
namespace inner {
constexpr sycl::specialization_id same_name{16};
// CHECK-NEXT: namespace {
Expand All @@ -333,14 +368,16 @@ constexpr sycl::specialization_id same_name{16};
// CHECK-NEXT: }
// CHECK-NEXT: } // namespace __sycl_detail
// CHECK-NEXT: } // namespace
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
// CHECK-NEXT: namespace sycl {
// CHECK-NEXT: namespace detail {
// CHECK-NEXT: template<>
// CHECK-NEXT: inline const char *get_spec_constant_symbolic_ID<::__sycl_detail::__spec_id_shim_[[SHIM_ID2]]()>() {
// CHECK-NEXT: return "";
// CHECK-NEXT: }
// CHECK-NEXT: // namespace detail
// CHECK-NEXT: // namespace sycl
// CHECK-NEXT: } // namespace detail
// CHECK-NEXT: } // namespace sycl
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
}
} // namespace
} // namespace outer
Expand All @@ -349,14 +386,16 @@ constexpr sycl::specialization_id same_name{16};
namespace outer {
namespace inner {
constexpr sycl::specialization_id same_name{17};
// CHECK: namespace sycl {
// CHECK: __SYCL_INLINE_NAMESPACE(cl) {
// CHECK-NEXT: namespace sycl {
// CHECK-NEXT: namespace detail {
// CHECK-NEXT: template<>
// CHECK-NEXT: inline const char *get_spec_constant_symbolic_ID<::outer::inner::same_name>() {
// CHECK-NEXT: return "";
// CHECK-NEXT: }
// CHECK-NEXT: } // namespace detail
// CHECK-NEXT: } // namespace sycl
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
}
} // namespace outer

Expand Down
Loading