Skip to content

Commit 4aa95e5

Browse files
author
Erich Keane
authored
[SYCL] Add the 'cl' inline namespace to the integration footer- (#3752)
Vlad Romanov brought up that we'd missed this in the initial implementation, so add it so that the 'cl' namespace is correctly included.
1 parent cbec0b5 commit 4aa95e5

File tree

3 files changed

+123
-68
lines changed

3 files changed

+123
-68
lines changed

clang/lib/Sema/SemaSYCL.cpp

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4671,8 +4671,8 @@ static void EmitSpecIdShims(raw_ostream &OS, unsigned &ShimCounter,
46714671
// function call parameters.
46724672
static std::string EmitSpecIdShims(raw_ostream &OS, unsigned &ShimCounter,
46734673
const VarDecl *VD) {
4674-
assert(VD->isInAnonymousNamespace() &&
4675-
"Function assumes this is in an anonymous namespace");
4674+
if (!VD->isInAnonymousNamespace())
4675+
return "";
46764676
std::string RelativeName = VD->getNameAsString();
46774677
EmitSpecIdShims(OS, ShimCounter, VD->getDeclContext(), RelativeName);
46784678
return RelativeName;
@@ -4689,30 +4689,28 @@ bool SYCLIntegrationFooter::emit(raw_ostream &OS) {
46894689
unsigned ShimCounter = 0;
46904690
for (const VarDecl *VD : SpecConstants) {
46914691
VD = VD->getCanonicalDecl();
4692+
std::string TopShim = EmitSpecIdShims(OS, ShimCounter, VD);
4693+
OS << "__SYCL_INLINE_NAMESPACE(cl) {\n";
4694+
OS << "namespace sycl {\n";
4695+
OS << "namespace detail {\n";
4696+
OS << "template<>\n";
4697+
OS << "inline const char *get_spec_constant_symbolic_ID<";
4698+
46924699
if (VD->isInAnonymousNamespace()) {
4693-
std::string TopShim = EmitSpecIdShims(OS, ShimCounter, VD);
4694-
OS << "namespace sycl {\n";
4695-
OS << "namespace detail {\n";
4696-
OS << "template<>\n";
4697-
OS << "inline const char *get_spec_constant_symbolic_ID<" << TopShim
4698-
<< ">() {\n";
4699-
OS << " return \"";
4700-
emitSpecIDName(OS, VD);
4701-
OS << "\";\n";
4700+
OS << TopShim;
47024701
} else {
4703-
OS << "namespace sycl {\n";
4704-
OS << "namespace detail {\n";
4705-
OS << "template<>\n";
4706-
OS << "inline const char *get_spec_constant_symbolic_ID<::";
4702+
OS << "::";
47074703
VD->printQualifiedName(OS, Policy);
4708-
OS << ">() {\n";
4709-
OS << " return \"";
4710-
emitSpecIDName(OS, VD);
4711-
OS << "\";\n";
47124704
}
4705+
4706+
OS << ">() {\n";
4707+
OS << " return \"";
4708+
emitSpecIDName(OS, VD);
4709+
OS << "\";\n";
47134710
OS << "}\n";
47144711
OS << "} // namespace detail\n";
47154712
OS << "} // namespace sycl\n";
4713+
OS << "} // __SYCL_INLINE_NAMESPACE(cl)\n";
47164714
}
47174715

47184716
OS << "#include <CL/sycl/detail/spec_const_integration.hpp>\n";

clang/test/CodeGenSYCL/anonymous_integration_footer.cpp

Lines changed: 64 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,19 @@ using namespace cl;
1414
// variable.
1515
struct S1 {
1616
static constexpr sycl::specialization_id a{1};
17-
// CHECK: namespace sycl {
17+
// CHECK: __SYCL_INLINE_NAMESPACE(cl) {
18+
// CHECK-NEXT: namespace sycl {
1819
// CHECK-NEXT: namespace detail {
1920
// CHECK-NEXT: template<>
2021
// CHECK-NEXT: inline const char *get_spec_constant_symbolic_ID<::S1::a>() {
2122
// CHECK-NEXT: return "";
2223
// CHECK-NEXT: }
2324
// CHECK-NEXT: } // namespace detail
2425
// CHECK-NEXT: } // namespace sycl
26+
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
2527
};
2628
constexpr sycl::specialization_id b{2};
29+
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
2730
// CHECK-NEXT: namespace sycl {
2831
// CHECK-NEXT: namespace detail {
2932
// CHECK-NEXT: template<>
@@ -32,7 +35,9 @@ constexpr sycl::specialization_id b{2};
3235
// CHECK-NEXT: }
3336
// CHECK-NEXT: } // namespace detail
3437
// CHECK-NEXT: } // namespace sycl
38+
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
3539
inline constexpr sycl::specialization_id c{3};
40+
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
3641
// CHECK-NEXT: namespace sycl {
3742
// CHECK-NEXT: namespace detail {
3843
// CHECK-NEXT: template<>
@@ -41,7 +46,9 @@ inline constexpr sycl::specialization_id c{3};
4146
// CHECK-NEXT: }
4247
// CHECK-NEXT: } // namespace detail
4348
// CHECK-NEXT: } // namespace sycl
49+
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
4450
static constexpr sycl::specialization_id d{4};
51+
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
4552
// CHECK-NEXT: namespace sycl {
4653
// CHECK-NEXT: namespace detail {
4754
// CHECK-NEXT: template<>
@@ -50,6 +57,7 @@ static constexpr sycl::specialization_id d{4};
5057
// CHECK-NEXT: }
5158
// CHECK-NEXT: } // namespace detail
5259
// CHECK-NEXT: } // namespace sycl
60+
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
5361

5462
namespace {
5563
struct S2 {
@@ -61,14 +69,16 @@ struct S2 {
6169
// CHECK-NEXT: }
6270
// CHECK-NEXT: } // namespace __sycl_detail
6371
// CHECK-NEXT: } // namespace
72+
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
6473
// CHECK-NEXT: namespace sycl {
6574
// CHECK-NEXT: namespace detail {
6675
// CHECK-NEXT: template<>
6776
// CHECK-NEXT: inline const char *get_spec_constant_symbolic_ID<::__sycl_detail::__spec_id_shim_[[SHIM_ID]]()>() {
6877
// CHECK-NEXT: return "";
6978
// CHECK-NEXT: }
70-
// CHECK-NEXT: // namespace detail
71-
// CHECK-NEXT: // namespace sycl
79+
// CHECK-NEXT: } // namespace detail
80+
// CHECK-NEXT: } // namespace sycl
81+
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
7282
};
7383
} // namespace
7484

@@ -77,6 +87,7 @@ struct S3 {
7787
static constexpr sycl::specialization_id a{Val};
7888
};
7989
template class S3<1>;
90+
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
8091
// CHECK-NEXT: namespace sycl {
8192
// CHECK-NEXT: namespace detail {
8293
// CHECK-NEXT: template<>
@@ -85,7 +96,9 @@ template class S3<1>;
8596
// CHECK-NEXT: }
8697
// CHECK-NEXT: } // namespace detail
8798
// CHECK-NEXT: } // namespace sycl
99+
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
88100
template class S3<2>;
101+
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
89102
// CHECK-NEXT: namespace sycl {
90103
// CHECK-NEXT: namespace detail {
91104
// CHECK-NEXT: template<>
@@ -94,9 +107,11 @@ template class S3<2>;
94107
// CHECK-NEXT: }
95108
// CHECK-NEXT: } // namespace detail
96109
// CHECK-NEXT: } // namespace sycl
110+
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
97111

98112
namespace inner {
99113
constexpr sycl::specialization_id same_name{5};
114+
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
100115
// CHECK-NEXT: namespace sycl {
101116
// CHECK-NEXT: namespace detail {
102117
// CHECK-NEXT: template<>
@@ -105,8 +120,10 @@ constexpr sycl::specialization_id same_name{5};
105120
// CHECK-NEXT: }
106121
// CHECK-NEXT: } // namespace detail
107122
// CHECK-NEXT: } // namespace sycl
123+
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
108124
}
109125
constexpr sycl::specialization_id same_name{6};
126+
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
110127
// CHECK-NEXT: namespace sycl {
111128
// CHECK-NEXT: namespace detail {
112129
// CHECK-NEXT: template<>
@@ -115,6 +132,7 @@ constexpr sycl::specialization_id same_name{6};
115132
// CHECK-NEXT: }
116133
// CHECK-NEXT: } // namespace detail
117134
// CHECK-NEXT: } // namespace sycl
135+
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
118136
namespace {
119137
constexpr sycl::specialization_id same_name{7};
120138
// CHECK-NEXT: namespace {
@@ -124,14 +142,16 @@ constexpr sycl::specialization_id same_name{7};
124142
// CHECK-NEXT: }
125143
// CHECK-NEXT: } // namespace __sycl_detail
126144
// CHECK-NEXT: } // namespace
145+
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
127146
// CHECK-NEXT: namespace sycl {
128147
// CHECK-NEXT: namespace detail {
129148
// CHECK-NEXT: template<>
130149
// CHECK-NEXT: inline const char *get_spec_constant_symbolic_ID<::__sycl_detail::__spec_id_shim_[[SHIM_ID]]()>() {
131150
// CHECK-NEXT: return "";
132151
// CHECK-NEXT: }
133-
// CHECK-NEXT: // namespace detail
134-
// CHECK-NEXT: // namespace sycl
152+
// CHECK-NEXT: } // namespace detail
153+
// CHECK-NEXT: } // namespace sycl
154+
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
135155
}
136156
namespace {
137157
namespace inner {
@@ -143,14 +163,16 @@ constexpr sycl::specialization_id same_name{8};
143163
// CHECK-NEXT: }
144164
// CHECK-NEXT: } // namespace __sycl_detail
145165
// CHECK-NEXT: } // namespace
166+
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
146167
// CHECK-NEXT: namespace sycl {
147168
// CHECK-NEXT: namespace detail {
148169
// CHECK-NEXT: template<>
149170
// CHECK-NEXT: inline const char *get_spec_constant_symbolic_ID<::__sycl_detail::__spec_id_shim_[[SHIM_ID]]()>() {
150171
// CHECK-NEXT: return "";
151172
// CHECK-NEXT: }
152-
// CHECK-NEXT: // namespace detail
153-
// CHECK-NEXT: // namespace sycl
173+
// CHECK-NEXT: } // namespace detail
174+
// CHECK-NEXT: } // namespace sycl
175+
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
154176
}
155177
} // namespace
156178
namespace inner {
@@ -165,27 +187,31 @@ constexpr sycl::specialization_id same_name{9};
165187
// CHECK-NEXT: } // namespace __sycl_detail
166188
// CHECK-NEXT: } // namespace
167189
// CHECK-NEXT: } // namespace inner
190+
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
168191
// CHECK-NEXT: namespace sycl {
169192
// CHECK-NEXT: namespace detail {
170193
// CHECK-NEXT: template<>
171194
// CHECK-NEXT: inline const char *get_spec_constant_symbolic_ID<::inner::__sycl_detail::__spec_id_shim_[[SHIM_ID]]()>() {
172195
// CHECK-NEXT: return "";
173196
// CHECK-NEXT: }
174-
// CHECK-NEXT: // namespace detail
175-
// CHECK-NEXT: // namespace sycl
197+
// CHECK-NEXT: } // namespace detail
198+
// CHECK-NEXT: } // namespace sycl
199+
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
176200
}
177201
} // namespace inner
178202

179203
namespace outer {
180204
constexpr sycl::specialization_id same_name{10};
205+
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
181206
// CHECK-NEXT: namespace sycl {
182207
// CHECK-NEXT: namespace detail {
183208
// CHECK-NEXT: template<>
184209
// CHECK-NEXT: inline const char *get_spec_constant_symbolic_ID<::outer::same_name>() {
185210
// CHECK-NEXT: return "";
186211
// CHECK-NEXT: }
187-
// CHECK-NEXT: // namespace detail
188-
// CHECK-NEXT: // namespace sycl
212+
// CHECK-NEXT: } // namespace detail
213+
// CHECK-NEXT: } // namespace sycl
214+
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
189215
namespace {
190216
constexpr sycl::specialization_id same_name{11};
191217
// CHECK-NEXT: namespace outer {
@@ -197,14 +223,16 @@ constexpr sycl::specialization_id same_name{11};
197223
// CHECK-NEXT: } // namespace __sycl_detail
198224
// CHECK-NEXT: } // namespace
199225
// CHECK-NEXT: } // namespace outer
226+
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
200227
// CHECK-NEXT: namespace sycl {
201228
// CHECK-NEXT: namespace detail {
202229
// CHECK-NEXT: template<>
203230
// CHECK-NEXT: inline const char *get_spec_constant_symbolic_ID<::outer::__sycl_detail::__spec_id_shim_[[SHIM_ID]]()>() {
204231
// CHECK-NEXT: return "";
205232
// CHECK-NEXT: }
206-
// CHECK-NEXT: // namespace detail
207-
// CHECK-NEXT: // namespace sycl
233+
// CHECK-NEXT: } // namespace detail
234+
// CHECK-NEXT: } // namespace sycl
235+
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
208236

209237
namespace inner {
210238
constexpr sycl::specialization_id same_name{12};
@@ -217,14 +245,16 @@ constexpr sycl::specialization_id same_name{12};
217245
// CHECK-NEXT: } // namespace __sycl_detail
218246
// CHECK-NEXT: } // namespace
219247
// CHECK-NEXT: } // namespace outer
248+
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
220249
// CHECK-NEXT: namespace sycl {
221250
// CHECK-NEXT: namespace detail {
222251
// CHECK-NEXT: template<>
223252
// CHECK-NEXT: inline const char *get_spec_constant_symbolic_ID<::outer::__sycl_detail::__spec_id_shim_[[SHIM_ID]]()>() {
224253
// CHECK-NEXT: return "";
225254
// CHECK-NEXT: }
226-
// CHECK-NEXT: // namespace detail
227-
// CHECK-NEXT: // namespace sycl
255+
// CHECK-NEXT: } // namespace detail
256+
// CHECK-NEXT: } // namespace sycl
257+
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
228258

229259
namespace {
230260
// This has multiple anonymous namespaces in its declaration context, we need to
@@ -253,14 +283,16 @@ constexpr sycl::specialization_id same_name{13};
253283
// CHECK-NEXT: } // namespace __sycl_detail
254284
// CHECK-NEXT: } // namespace
255285
// CHECK-NEXT: } // namespace outer
286+
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
256287
// CHECK-NEXT: namespace sycl {
257288
// CHECK-NEXT: namespace detail {
258289
// CHECK-NEXT: template<>
259290
// CHECK-NEXT: inline const char *get_spec_constant_symbolic_ID<::outer::__sycl_detail::__spec_id_shim_[[SHIM_ID_2]]()>() {
260291
// CHECK-NEXT: return "";
261292
// CHECK-NEXT: }
262-
// CHECK-NEXT: // namespace detail
263-
// CHECK-NEXT: // namespace sycl
293+
// CHECK-NEXT: } // namespace detail
294+
// CHECK-NEXT: } // namespace sycl
295+
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
264296
}
265297
} // namespace inner
266298
} // namespace
@@ -276,14 +308,16 @@ constexpr sycl::specialization_id same_name{14};
276308
// CHECK-NEXT: }
277309
// CHECK-NEXT: } // namespace __sycl_detail
278310
// CHECK-NEXT: } // namespace
311+
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
279312
// CHECK-NEXT: namespace sycl {
280313
// CHECK-NEXT: namespace detail {
281314
// CHECK-NEXT: template<>
282315
// CHECK-NEXT: inline const char *get_spec_constant_symbolic_ID<::__sycl_detail::__spec_id_shim_[[SHIM_ID]]()>() {
283316
// CHECK-NEXT: return "";
284317
// CHECK-NEXT: }
285-
// CHECK-NEXT: // namespace detail
286-
// CHECK-NEXT: // namespace sycl
318+
// CHECK-NEXT: } // namespace detail
319+
// CHECK-NEXT: } // namespace sycl
320+
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
287321
namespace {
288322
constexpr sycl::specialization_id same_name{15};
289323
// CHECK-NEXT: namespace {
@@ -304,15 +338,16 @@ constexpr sycl::specialization_id same_name{15};
304338
// CHECK-NEXT: }
305339
// CHECK-NEXT: } // namespace __sycl_detail
306340
// CHECK-NEXT: } // namespace
307-
341+
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
308342
// CHECK-NEXT: namespace sycl {
309343
// CHECK-NEXT: namespace detail {
310344
// CHECK-NEXT: template<>
311345
// CHECK-NEXT: inline const char *get_spec_constant_symbolic_ID<::__sycl_detail::__spec_id_shim_[[SHIM_ID2]]()>() {
312346
// CHECK-NEXT: return "";
313347
// CHECK-NEXT: }
314-
// CHECK-NEXT: // namespace detail
315-
// CHECK-NEXT: // namespace sycl
348+
// CHECK-NEXT: } // namespace detail
349+
// CHECK-NEXT: } // namespace sycl
350+
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
316351
namespace inner {
317352
constexpr sycl::specialization_id same_name{16};
318353
// CHECK-NEXT: namespace {
@@ -333,14 +368,16 @@ constexpr sycl::specialization_id same_name{16};
333368
// CHECK-NEXT: }
334369
// CHECK-NEXT: } // namespace __sycl_detail
335370
// CHECK-NEXT: } // namespace
371+
// CHECK-NEXT: __SYCL_INLINE_NAMESPACE(cl) {
336372
// CHECK-NEXT: namespace sycl {
337373
// CHECK-NEXT: namespace detail {
338374
// CHECK-NEXT: template<>
339375
// CHECK-NEXT: inline const char *get_spec_constant_symbolic_ID<::__sycl_detail::__spec_id_shim_[[SHIM_ID2]]()>() {
340376
// CHECK-NEXT: return "";
341377
// CHECK-NEXT: }
342-
// CHECK-NEXT: // namespace detail
343-
// CHECK-NEXT: // namespace sycl
378+
// CHECK-NEXT: } // namespace detail
379+
// CHECK-NEXT: } // namespace sycl
380+
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
344381
}
345382
} // namespace
346383
} // namespace outer
@@ -349,14 +386,16 @@ constexpr sycl::specialization_id same_name{16};
349386
namespace outer {
350387
namespace inner {
351388
constexpr sycl::specialization_id same_name{17};
352-
// CHECK: namespace sycl {
389+
// CHECK: __SYCL_INLINE_NAMESPACE(cl) {
390+
// CHECK-NEXT: namespace sycl {
353391
// CHECK-NEXT: namespace detail {
354392
// CHECK-NEXT: template<>
355393
// CHECK-NEXT: inline const char *get_spec_constant_symbolic_ID<::outer::inner::same_name>() {
356394
// CHECK-NEXT: return "";
357395
// CHECK-NEXT: }
358396
// CHECK-NEXT: } // namespace detail
359397
// CHECK-NEXT: } // namespace sycl
398+
// CHECK-NEXT: } // __SYCL_INLINE_NAMESPACE(cl)
360399
}
361400
} // namespace outer
362401

0 commit comments

Comments
 (0)