File: temp_arg_string_printing.cpp

package info (click to toggle)
llvm-toolchain-15 1%3A15.0.6-4
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 1,554,644 kB
  • sloc: cpp: 5,922,452; ansic: 1,012,136; asm: 674,362; python: 191,568; objc: 73,855; f90: 42,327; lisp: 31,913; pascal: 11,973; javascript: 10,144; sh: 9,421; perl: 7,447; ml: 5,527; awk: 3,523; makefile: 2,520; xml: 885; cs: 573; fortran: 567
file content (129 lines) | stat: -rw-r--r-- 5,070 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
// RUN: %clang_cc1 -std=c++20 -fsyntax-only -ast-print %s | FileCheck %s

using size_t = __SIZE_TYPE__;
static_assert(__has_builtin(__make_integer_seq));

template <class T, T... I> class idx_seq {};
template <size_t N> using make_idx_seq = __make_integer_seq<idx_seq, size_t, N>;

template <class CharT, size_t N>
struct Str {
  constexpr Str(CharT const (&s)[N]) : Str(s, make_idx_seq<N>()) {}
  CharT value[N];

private:
  template <size_t... I>
  constexpr Str(CharT const (&s)[N], idx_seq<size_t, I...>) : value{s[I]...} {}
};

template <Str> class ASCII {};

void not_string() {
  // CHECK{LITERAL}: ASCII<{{9, -1, 42}}>
  new ASCII<(int[]){9, -1, 42}>;
  // CHECK{LITERAL}: ASCII<{{3.140000e+00, 0.000000e+00, 4.200000e+01}}>
  new ASCII<(double[]){3.14, 0., 42.}>;
}

void narrow() {
  // CHECK{LITERAL}: ASCII<{""}>
  new ASCII<"">;
  // CHECK{LITERAL}: ASCII<{"the quick brown fox jumps"}>
  new ASCII<"the quick brown fox jumps">;
  // CHECK{LITERAL}: ASCII<{"OVER THE LAZY DOG 0123456789"}>
  new ASCII<"OVER THE LAZY DOG 0123456789">;
  // CHECK{LITERAL}: ASCII<{"\\`~!@#$%^&*()_+-={}[]|\'\";:,.<>?/"}>
  new ASCII<R"(\`~!@#$%^&*()_+-={}[]|'";:,.<>?/)">;
  // CHECK{LITERAL}: ASCII<{{101, 115, 99, 97, 112, 101, 0, 0}}>
  new ASCII<"escape\0">;
  // CHECK{LITERAL}: ASCII<{"escape\r\n"}>
  new ASCII<"escape\r\n">;
  // CHECK{LITERAL}: ASCII<{"escape\\\t\f\v"}>
  new ASCII<"escape\\\t\f\v">;
  // CHECK{LITERAL}: ASCII<{"escape\a\bc"}>
  new ASCII<"escape\a\b\c">;
  // CHECK{LITERAL}: ASCII<{{110, 111, 116, 17, 0}}>
  new ASCII<"not\x11">;
  // CHECK{LITERAL}: ASCII<{{18, 20, 127, 16, 1, 32, 97, 98, 99, 0}}>
  new ASCII<"\x12\x14\x7f\x10\x01 abc">;
  // CHECK{LITERAL}: ASCII<{{18, 20, 127, 16, 1, 32, 97, 98, 99, 100, 0}}>
  new ASCII<"\x12\x14\x7f\x10\x01 abcd">;
  // CHECK{LITERAL}: ASCII<{"print more characters as string"}>
  new ASCII<"print more characters as string">;
  // CHECK{LITERAL}: ASCII<{"print more characters as string, no uplimit"}>
  new ASCII<"print more characters as string, no uplimit">;
}

void wide() {
  // CHECK{LITERAL}: ASCII<{L""}>
  new ASCII<L"">;
  // CHECK{LITERAL}: ASCII<{L"the quick brown fox jumps"}>
  new ASCII<L"the quick brown fox jumps">;
  // CHECK{LITERAL}: ASCII<{L"OVER THE LAZY DOG 0123456789"}>
  new ASCII<L"OVER THE LAZY DOG 0123456789">;
  // CHECK{LITERAL}: ASCII<{L"\\`~!@#$%^&*()_+-={}[]|\'\";:,.<>?/"}>
  new ASCII<LR"(\`~!@#$%^&*()_+-={}[]|'";:,.<>?/)">;
  // CHECK{LITERAL}: ASCII<{{101, 115, 99, 97, 112, 101, 0, 0}}>
  new ASCII<L"escape\0">;
  // CHECK{LITERAL}: ASCII<{L"escape\r\n"}>
  new ASCII<L"escape\r\n">;
  // CHECK{LITERAL}: ASCII<{L"escape\\\t\f\v"}>
  new ASCII<L"escape\\\t\f\v">;
  // CHECK{LITERAL}: ASCII<{L"escape\a\bc"}>
  new ASCII<L"escape\a\b\c">;
  // CHECK{LITERAL}: ASCII<{{110, 111, 116, 17, 0}}>
  new ASCII<L"not\x11">;
  // CHECK{LITERAL}: ASCII<{{18, 20, 255, 22909, 136, 32, 97, 98, 99, 0}}>
  new ASCII<L"\x12\x14\xff\x597d\x88 abc">;
  // CHECK{LITERAL}: ASCII<{{18, 20, 255, 22909, 136, 32, 97, 98, 99, 100, 0}}>
  new ASCII<L"\x12\x14\xff\x597d\x88 abcd">;
  // CHECK{LITERAL}: ASCII<{L"print more characters as string"}>
  new ASCII<L"print more characters as string">;
  // CHECK{LITERAL}: ASCII<{L"print more characters as string, no uplimit"}>
  new ASCII<L"print more characters as string, no uplimit">;
}

void utf8() {
  // CHECK{LITERAL}: ASCII<{u8""}>
  new ASCII<u8"">;
  // CHECK{LITERAL}: ASCII<{u8"\\`~!@#$%^&*()_+-={}[]|\'\";:,.<>?/"}>
  new ASCII<u8R"(\`~!@#$%^&*()_+-={}[]|'";:,.<>?/)">;
  // CHECK{LITERAL}: ASCII<{{101, 115, 99, 97, 112, 101, 0, 0}}>
  new ASCII<u8"escape\0">;
  // CHECK{LITERAL}: ASCII<{u8"escape\r\n"}>
  new ASCII<u8"escape\r\n">;
  // CHECK{LITERAL}: ASCII<{{229, 165, 189, 239, 191, 189, 0}}>
  new ASCII<u8"\u597d\ufffd">;
  // CHECK{LITERAL}: ASCII<{u8"print more characters as string, no uplimit"}>
  new ASCII<u8"print more characters as string, no uplimit">;
}

void utf16() {
  // CHECK{LITERAL}: ASCII<{u""}>
  new ASCII<u"">;
  // CHECK{LITERAL}: ASCII<{u"\\`~!@#$%^&*()_+-={}[]|\'\";:,.<>?/"}>
  new ASCII<uR"(\`~!@#$%^&*()_+-={}[]|'";:,.<>?/)">;
  // CHECK{LITERAL}: ASCII<{{101, 115, 99, 97, 112, 101, 0, 0}}>
  new ASCII<u"escape\0">;
  // CHECK{LITERAL}: ASCII<{u"escape\r\n"}>
  new ASCII<u"escape\r\n">;
  // CHECK{LITERAL}: ASCII<{{22909, 65533, 0}}>
  new ASCII<u"\u597d\ufffd">;
  // CHECK{LITERAL}: ASCII<{u"print more characters as string, no uplimit"}>
  new ASCII<u"print more characters as string, no uplimit">;
}

void utf32() {
  // CHECK{LITERAL}: ASCII<{U""}>
  new ASCII<U"">;
  // CHECK{LITERAL}: ASCII<{U"\\`~!@#$%^&*()_+-={}[]|\'\";:,.<>?/"}>
  new ASCII<UR"(\`~!@#$%^&*()_+-={}[]|'";:,.<>?/)">;
  // CHECK{LITERAL}: ASCII<{{101, 115, 99, 97, 112, 101, 0, 0}}>
  new ASCII<U"escape\0">;
  // CHECK{LITERAL}: ASCII<{U"escape\r\n"}>
  new ASCII<U"escape\r\n">;
  // CHECK{LITERAL}: ASCII<{{22909, 131358, 0}}>
  new ASCII<U"\u597d\U0002011E">;
  // CHECK{LITERAL}: ASCII<{U"print more characters as string, no uplimit"}>
  new ASCII<U"print more characters as string, no uplimit">;
}