You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.5 KiB
71 lines
1.5 KiB
/*
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
// test that templated types are sufficiently unique'd by the frontend, so that
|
|
// it doesn't conflate different types
|
|
|
|
namespace mangling {
|
|
|
|
template <typename... Types>
|
|
struct Tuple {};
|
|
|
|
int bad_packed_templates() {
|
|
Tuple<Tuple<int>> x;
|
|
return 1 / 0;
|
|
}
|
|
|
|
typedef decltype(nullptr) nullptr_t;
|
|
template <nullptr_t X>
|
|
struct NullPtrTemplate {};
|
|
|
|
int bad_nullptr_templates() {
|
|
NullPtrTemplate<nullptr> x1;
|
|
return 1 / 0;
|
|
}
|
|
|
|
template <int x>
|
|
struct IntTemplate {};
|
|
|
|
template <char x>
|
|
struct CharTemplate {};
|
|
template <long x>
|
|
struct LongTemplate {};
|
|
|
|
int bad_integral_types_templates() {
|
|
IntTemplate<0> x2;
|
|
CharTemplate<'c'> x3;
|
|
LongTemplate<1234567890L> x4;
|
|
return 1 / 0;
|
|
}
|
|
|
|
template <const int* pci>
|
|
struct PointerTypeTemplate {};
|
|
int array_is_pointer_type[10];
|
|
|
|
template <int (&pa)[5]>
|
|
struct PointerTypeTemplate2 {};
|
|
int array_of_size_5[5];
|
|
|
|
template <void (*pf)(int)>
|
|
struct FunctionPointerTemplate {};
|
|
void some_fun(int);
|
|
|
|
struct SomeStruct {};
|
|
template <const SomeStruct& b>
|
|
struct ReferenceTypeTemplate {};
|
|
SomeStruct some_struct;
|
|
|
|
int bad_reference_and_pointer_templates() {
|
|
PointerTypeTemplate<array_is_pointer_type> a;
|
|
PointerTypeTemplate2<array_of_size_5> c;
|
|
FunctionPointerTemplate<&some_fun> d;
|
|
ReferenceTypeTemplate<some_struct> b;
|
|
return 1 / 0;
|
|
}
|
|
|
|
} // namespace mangling
|