Skip to content

Commit 3716ea1

Browse files
authored
[SYCL][RTC][NFC] Revert changes to include_files property (#17460)
Partially revert #17307: change the container in the `include_files` property back to vector of pairs, as the more complex internal structure of a map made it very fragile to test in `sycl_classes_abi_neutral_test.cpp`. --------- Signed-off-by: Julian Oppermann <[email protected]>
1 parent 7d92406 commit 3716ea1

File tree

2 files changed

+20
-40
lines changed

2 files changed

+20
-40
lines changed

sycl/include/sycl/kernel_bundle.hpp

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -26,22 +26,20 @@
2626
#include <sycl/ext/oneapi/properties/property.hpp> // build_options
2727
#include <sycl/ext/oneapi/properties/property_value.hpp> // and log
2828

29-
#include <algorithm> // for copy
3029
#include <array> // for array
3130
#include <cstddef> // for std::byte
3231
#include <cstring> // for size_t, memcpy
3332
#include <functional> // for function
34-
#include <iterator> // for distance, back_inserter
33+
#include <iterator> // for distance
3534
#include <memory> // for shared_ptr, operator==, hash
3635
#if __has_include(<span>)
3736
#include <span>
3837
#endif
39-
#include <string> // for string
40-
#include <type_traits> // for enable_if_t, remove_refer...
41-
#include <unordered_map> // for unordered_map
42-
#include <utility> // for move
43-
#include <variant> // for hash
44-
#include <vector> // for vector
38+
#include <string> // for string
39+
#include <type_traits> // for enable_if_t, remove_refer...
40+
#include <utility> // for move
41+
#include <variant> // for hash
42+
#include <vector> // for vector
4543

4644
namespace sycl {
4745
inline namespace _V1 {
@@ -1032,17 +1030,19 @@ struct include_files
10321030
detail::PropKind::IncludeFiles> {
10331031
include_files() {}
10341032
include_files(const std::string &name, const std::string &content) {
1035-
record.emplace(name, content);
1033+
record.emplace_back(name, content);
10361034
}
10371035
void add(const std::string &name, const std::string &content) {
1038-
bool inserted = record.try_emplace(name, content).second;
1039-
if (!inserted) {
1036+
if (std::find_if(record.begin(), record.end(), [&name](auto &p) {
1037+
return p.first == name;
1038+
}) != record.end()) {
10401039
throw sycl::exception(make_error_code(errc::invalid),
10411040
"Include file '" + name +
10421041
"' is already registered");
10431042
}
1043+
record.emplace_back(name, content);
10441044
}
1045-
std::unordered_map<std::string, std::string> record;
1045+
std::vector<std::pair<std::string, std::string>> record;
10461046
};
10471047
using include_files_key = include_files;
10481048

@@ -1199,10 +1199,7 @@ kernel_bundle<bundle_state::ext_oneapi_source> create_kernel_bundle_from_source(
11991199
const std::string &Source, PropertyListT props = {}) {
12001200
std::vector<std::pair<std::string, std::string>> IncludePairsVec;
12011201
if constexpr (props.template has_property<include_files>()) {
1202-
const std::unordered_map<std::string, std::string> &IncludePairs =
1203-
props.template get_property<include_files>().record;
1204-
std::copy(IncludePairs.begin(), IncludePairs.end(),
1205-
std::back_inserter(IncludePairsVec));
1202+
IncludePairsVec = props.template get_property<include_files>().record;
12061203
}
12071204

12081205
return detail::make_kernel_bundle_from_source(SyclContext, Language, Source,
@@ -1218,10 +1215,7 @@ kernel_bundle<bundle_state::ext_oneapi_source> create_kernel_bundle_from_source(
12181215
const std::vector<std::byte> &Bytes, PropertyListT props = {}) {
12191216
std::vector<std::pair<std::string, std::string>> IncludePairsVec;
12201217
if constexpr (props.template has_property<include_files>()) {
1221-
const std::unordered_map<std::string, std::string> &IncludePairs =
1222-
props.template get_property<include_files>().record;
1223-
std::copy(IncludePairs.begin(), IncludePairs.end(),
1224-
std::back_inserter(IncludePairsVec));
1218+
IncludePairsVec = props.template get_property<include_files>().record;
12251219
}
12261220

12271221
return detail::make_kernel_bundle_from_source(SyclContext, Language, Bytes,

sycl/test/abi/sycl_classes_abi_neutral_test.cpp

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -26,26 +26,12 @@
2626

2727
// CHECK: 0 | struct sycl::ext::oneapi::experimental::include_files
2828
// CHECK-NEXT: 0 | struct sycl::ext::oneapi::experimental::detail::run_time_property_key
29-
// CHECK: 0 | class std::unordered_map<class std::basic_string<char>, class std::basic_string<char> > record
30-
// CHECK-NEXT: 0 | class std::_Hashtable<class std::basic_string<char>, struct std::pair<const class std::basic_string<char>, class std::basic_string<char> >, class std::allocator<struct std::pair<const class std::basic_string<char>, class std::basic_string<char> > >, struct std::__detail::_Select1st, struct std::equal_to<class std::basic_string<char> >, struct std::hash<[[HASH_TEMPLATE_ARG:(string)|(class std::basic_string<char> )]]>, struct std::__detail::_Mod_range_hashing, struct std::__detail::_Default_ranged_hash, struct std::__detail::_Prime_rehash_policy, struct std::__detail::_Hashtable_traits<true, false, true> > _M_h
31-
// CHECK-NEXT: 0 | struct std::__detail::_Hashtable_base<class std::basic_string<char>, struct std::pair<const class std::basic_string<char>, class std::basic_string<char> >, struct std::__detail::_Select1st, struct std::equal_to<class std::basic_string<char> >, struct std::hash<[[HASH_TEMPLATE_ARG]]>, struct std::__detail::_Mod_range_hashing, struct std::__detail::_Default_ranged_hash, struct std::__detail::_Hashtable_traits<true, false, true> > (base) (empty)
32-
// CHECK-NEXT: 0 | struct std::__detail::_Hash_code_base<class std::basic_string<char>, struct std::pair<const class std::basic_string<char>, class std::basic_string<char> >, struct std::__detail::_Select1st, struct std::hash<[[HASH_TEMPLATE_ARG]]>, struct std::__detail::_Mod_range_hashing, struct std::__detail::_Default_ranged_hash, true> (base) (empty)
33-
// CHECK-NEXT: 0 | struct std::__detail::_Hashtable_ebo_helper<1, struct std::hash<[[HASH_TEMPLATE_ARG]]> > (base) (empty)
34-
// CHECK-NEXT: 0 | struct std::hash<[[HASH_TEMPLATE_ARG]]> (base) (empty)
35-
// CHECK: 0 | struct std::__hash_base<unsigned long, class std::basic_string<char> > (base) (empty)
36-
// CHECK-NEXT: 0 | struct std::__detail::_Hashtable_ebo_helper<0, struct std::equal_to<class std::basic_string<char> > > (base) (empty)
37-
// CHECK-NEXT: 0 | struct std::equal_to<class std::basic_string<char> > (base) (empty)
38-
// CHECK-NEXT: 0 | struct std::binary_function<class std::basic_string<char>, class std::basic_string<char>, _Bool> (base) (empty)
39-
// CHECK-NEXT: 0 | struct std::__detail::_Map_base<class std::basic_string<char>, struct std::pair<const class std::basic_string<char>, class std::basic_string<char> >, class std::allocator<struct std::pair<const class std::basic_string<char>, class std::basic_string<char> > >, struct std::__detail::_Select1st, struct std::equal_to<class std::basic_string<char> >, struct std::hash<[[HASH_TEMPLATE_ARG]]>, struct std::__detail::_Mod_range_hashing, struct std::__detail::_Default_ranged_hash, struct std::__detail::_Prime_rehash_policy, struct std::__detail::_Hashtable_traits<true, false, true> > (base) (empty)
40-
// CHECK-NEXT: 0 | struct std::__detail::_Insert<class std::basic_string<char>, struct std::pair<const class std::basic_string<char>, class std::basic_string<char> >, class std::allocator<struct std::pair<const class std::basic_string<char>, class std::basic_string<char> > >, struct std::__detail::_Select1st, struct std::equal_to<class std::basic_string<char> >, struct std::hash<[[HASH_TEMPLATE_ARG]]>, struct std::__detail::_Mod_range_hashing, struct std::__detail::_Default_ranged_hash, struct std::__detail::_Prime_rehash_policy, struct std::__detail::_Hashtable_traits<true, false, true> > (base) (empty)
41-
// CHECK-NEXT: 0 | struct std::__detail::_Insert_base<class std::basic_string<char>, struct std::pair<const class std::basic_string<char>, class std::basic_string<char> >, class std::allocator<struct std::pair<const class std::basic_string<char>, class std::basic_string<char> > >, struct std::__detail::_Select1st, struct std::equal_to<class std::basic_string<char> >, struct std::hash<[[HASH_TEMPLATE_ARG]]>, struct std::__detail::_Mod_range_hashing, struct std::__detail::_Default_ranged_hash, struct std::__detail::_Prime_rehash_policy, struct std::__detail::_Hashtable_traits<true, false, true> > (base) (empty)
42-
// CHECK-NEXT: 0 | struct std::__detail::_Rehash_base<class std::basic_string<char>, struct std::pair<const class std::basic_string<char>, class std::basic_string<char> >, class std::allocator<struct std::pair<const class std::basic_string<char>, class std::basic_string<char> > >, struct std::__detail::_Select1st, struct std::equal_to<class std::basic_string<char> >, struct std::hash<[[HASH_TEMPLATE_ARG]]>, struct std::__detail::_Mod_range_hashing, struct std::__detail::_Default_ranged_hash, struct std::__detail::_Prime_rehash_policy, struct std::__detail::_Hashtable_traits<true, false, true> > (base) (empty)
43-
// CHECK-NEXT: 0 | struct std::__detail::_Equality<class std::basic_string<char>, struct std::pair<const class std::basic_string<char>, class std::basic_string<char> >, class std::allocator<struct std::pair<const class std::basic_string<char>, class std::basic_string<char> > >, struct std::__detail::_Select1st, struct std::equal_to<class std::basic_string<char> >, struct std::hash<[[HASH_TEMPLATE_ARG]]>, struct std::__detail::_Mod_range_hashing, struct std::__detail::_Default_ranged_hash, struct std::__detail::_Prime_rehash_policy, struct std::__detail::_Hashtable_traits<true, false, true> > (base) (empty)
44-
// CHECK-NEXT: 0 | struct std::__detail::_Hashtable_alloc<class std::allocator<struct std::__detail::_Hash_node<struct std::pair<const class std::basic_string<char>, class std::basic_string<char> >, true> > > (base) (empty)
45-
// CHECK-NEXT: 0 | struct std::__detail::_Hashtable_ebo_helper<0, class std::allocator<struct std::__detail::_Hash_node<struct std::pair<const class std::basic_string<char>, class std::basic_string<char> >, true> > > (base) (empty)
46-
// CHECK-NEXT: 0 | class std::allocator<struct std::__detail::_Hash_node<struct std::pair<const class std::basic_string<char>, class std::basic_string<char> >, true> > (base) (empty)
47-
// CHECK-NEXT: 0 | class {{(std::__new_allocator|__gnu_cxx::new_allocator)}}<struct std::__detail::_Hash_node<struct std::pair<const class std::basic_string<char>, class std::basic_string<char> >, true> > (base) (empty)
48-
// CHECK: 0 | __buckets_ptr _M_buckets
29+
// CHECK: 0 | class std::vector<struct std::pair<class std::basic_string<char>, class std::basic_string<char> > > record
30+
// CHECK-NEXT: 0 | struct std::_Vector_base<struct std::pair<class std::basic_string<char>, class std::basic_string<char> >, class std::allocator<struct std::pair<class std::basic_string<char>, class std::basic_string<char> > > > (base)
31+
// CHECK-NEXT: 0 | struct std::_Vector_base<struct std::pair<class std::basic_string<char>, class std::basic_string<char> >, class std::allocator<struct std::pair<class std::basic_string<char>, class std::basic_string<char> > > >::_Vector_impl _M_impl
32+
// CHECK-NEXT: 0 | class std::allocator<struct std::pair<class std::basic_string<char>, class std::basic_string<char> > > (base) (empty)
33+
// CHECK-NEXT: 0 | class {{(std::__new_allocator|__gnu_cxx::new_allocator)}}<struct std::pair<class std::basic_string<char>, class std::basic_string<char> > > (base) (empty)
34+
// CHECK-NEXT: 0 | {{(struct std::_Vector_base<struct std::pair<class std::basic_string<char>, class std::basic_string<char> >, class std::allocator<struct std::pair<class std::basic_string<char>, class std::basic_string<char> > > >::_Vector_impl_data \(base\)|pointer _M_start)}}
4935

5036
// CHECK: 0 | struct sycl::ext::oneapi::experimental::registered_names
5137
// CHECK-NEXT: 0 | struct sycl::ext::oneapi::experimental::detail::run_time_property_key

0 commit comments

Comments
 (0)