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
|
/* { dg-do run } */
/* { dg-options "--embed-dir=${srcdir}/c-c++-common/cpp/embed-dir" } */
/* { dg-additional-options "-std=gnu99" { target c } } */
#if __has_embed ("." gnu::base64 ("")) != __STDC_EMBED_EMPTY__
#error "__has_embed fail"
#endif
#if __has_embed ("." gnu::base64 ("SA==")) != __STDC_EMBED_FOUND__
#error "__has_embed fail"
#endif
#if __has_embed ("." prefix(-) suffix (-) if_empty (-) __gnu__::__base64__ ("SA==")) != __STDC_EMBED_FOUND__
#error "__has_embed fail"
#endif
#if __has_embed ("." gnu::__base64__ ("SGU=")) != __STDC_EMBED_FOUND__
#error "__has_embed fail"
#endif
#if __has_embed ("." gnu::__base64__ ("SGVs")) != __STDC_EMBED_FOUND__
#error "__has_embed fail"
#endif
#if __has_embed ("." __gnu__::base64 ("SGVsbG8=")) != __STDC_EMBED_FOUND__
#error "__has_embed fail"
#endif
/* M. Tulli Ciceronis De Finibus Bonorum et Malorum. Liber Primus. */
/* echo "Tm9u....bnQu" | fmt -s -w 76 | base64 -d to decode. */
#define BONORUM_ET_MALORUM \
"Tm9uIGVyYW0gbsOpc2NpdXMsIEJydXRlLCBjdW0sIHF1w6Ygc3VtbWlzIGluZ8OpbmlpcyBleHF1aXNpdMOhcXVlIGRvY3Ryw61uYSBwaGlsw7Nzb3BoaSBHcsOmY28gc2VybcOzbmUgdHJhY3RhdsOtc3NlbnQsIGVhIExhdMOtbmlzIGzDrXR0ZXJpcyBtYW5kYXLDqW11cywgZm9yZSB1dCBoaWMgbm9zdGVyIGxhYm9yIGluIHbDoXJpYXMgcmVwcmVoZW5zacOzbmVzIGluY8O6cnJlcmV0LiBuYW0gcXVpYsO6c2RhbSwgZXQgaWlzIHF1aWRlbSBub24gw6FkbW9kdW0gaW5kw7NjdGlzLCB0b3R1bSBob2MgZMOtc3BsaWNldCBwaGlsb3NvcGjDoXJpLiBxdWlkYW0gYXV0ZW0gbm9uIHRhbSBpZCByZXByZWjDqW5kdW50LCBzaSByZW3DrXNzaXVzIGFnw6F0dXIsIHNlZCB0YW50dW0gc3TDumRpdW0gdGFtcXVlIG11bHRhbSDDs3BlcmFtIHBvbsOpbmRhbSBpbiBlbyBub24gYXJiaXRyw6FudHVyLiBlcnVudCDDqXRpYW0sIGV0IGlpIHF1aWRlbSBlcnVkw610aSBHcsOmY2lzIGzDrXR0ZXJpcywgY29udGVtbsOpbnRlcyBMYXTDrW5hcywgcXVpIHNlIGRpY2FudCBpbiBHcsOmY2lzIGxlZ8OpbmRpcyDDs3BlcmFtIG1hbGxlIGNvbnPDum1lcmUuIHBvc3Ryw6ltbyDDoWxpcXVvcyBmdXTDunJvcyBzw7pzcGljb3IsIHF1aSBtZSBhZCDDoWxpYXMgbMOtdHRlcmFzIHZvY2VudCwgZ2VudXMgaG9jIHNjcmliw6luZGksIGV0c2kgc2l0IGVsw6lnYW5zLCBwZXJzw7Nuw6YgdGFtZW4gZXQgZGlnbml0w6F0aXMgZXNzZSBuZWdlbnQu"
#if __has_embed ("." gnu::base64 (BONORUM_ET_MALORUM)) != __STDC_EMBED_FOUND__
#error "__has_embed fail"
#endif
#if __has_embed ("foo" gnu::base64 ("SGU=")) != __STDC_EMBED_NOT_FOUND__
#error "__has_embed fail"
#endif
#if __has_embed (<foo> gnu::base64 ("SGU=")) != __STDC_EMBED_NOT_FOUND__
#error "__has_embed fail"
#endif
#if __has_embed (<.> gnu::base64 ("SGU=")) != __STDC_EMBED_NOT_FOUND__
#error "__has_embed fail"
#endif
#if __has_embed ("." gnu::base64 ("SGU=") limit(5)) != __STDC_EMBED_NOT_FOUND__
#error "__has_embed fail"
#endif
#if __has_embed ("." gnu::base64 ("SGU=") gnu::offset(2)) != __STDC_EMBED_NOT_FOUND__
#error "__has_embed fail"
#endif
#embed "." gnu::base64 ("") if_empty (int a = 42;) prefix(+ +) suffix (+ +)
#embed "." __gnu__::__base64__ ("SA==") prefix (int b = ) suffix (;) if_empty (+ +)
const unsigned char c[] = {
#embed "." gnu::base64("SGU=")
};
const unsigned char d[] = {
#embed "." gnu::base64 ("SGVs")
};
const unsigned char e[] = {
#embed "." gnu::base64 ("SGVsbG8=")
};
const unsigned char f[] = {
#ifdef __cplusplus
#embed "." gnu::base64 (BONORUM_ET_MALORUM) prefix (' ', )
#else
#embed "." gnu::base64 (BONORUM_ET_MALORUM) prefix ([1] = ) suffix(, [0] = ' ')
#endif
};
#if __has_embed ("." gnu::base64("TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCwg" \
"c2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWdu" \
"YSBhbGlxdWEuCg==")) == __STDC_EMBED_FOUND__
const unsigned char g[] = {
#embed "." gnu::base64("" \
"T" "G9" "yZW" \
"0gaX" \
"BzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCwg" \
"c2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWdu" \
"YSBhbGlxdWEuCg==")
};
#endif
#ifdef __cplusplus
#define C "C"
#else
#define C
#endif
extern C void abort (void);
extern C int memcmp (const void *, const void *, __SIZE_TYPE__);
int
main ()
{
if (a != 42 || b != 'H')
abort ();
if (sizeof (c) != 2 || c[0] != 'H' || c[1] != 'e')
abort ();
if (sizeof (d) != 3 || d[0] != 'H' || d[1] != 'e' || d[2] != 'l')
abort ();
if (sizeof (e) != 5 || memcmp (e, "Hello", 5))
abort ();
if (sizeof (f) != 1 + 747 || memcmp (f, " Non eram néscius, Brute",
sizeof (" Non eram néscius, Brute") - 1))
abort ();
const char ge[]
= "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.";
if (sizeof (g) != sizeof (ge)
|| memcmp (g, ge, sizeof (ge) - 1)
|| g[sizeof (ge) - 1] != '\n')
abort ();
}
|