xref: /llvm-project/clang/test/Preprocessor/embed_parsing_errors.c (revision 41c6e4379204ffc00948edd33d59ba5ebbceaba2)
1*41c6e437SMariya Podchishchaeva // RUN: %clang_cc1 -std=c23 %s -E -verify
2*41c6e437SMariya Podchishchaeva 
3*41c6e437SMariya Podchishchaeva // Test the parsing behavior for #embed and all of its parameters to ensure we
4*41c6e437SMariya Podchishchaeva // recover from failures gracefully.
5*41c6e437SMariya Podchishchaeva char buffer[] = {
6*41c6e437SMariya Podchishchaeva #embed
7*41c6e437SMariya Podchishchaeva // expected-error@-1 {{expected "FILENAME" or <FILENAME>}}
8*41c6e437SMariya Podchishchaeva 
9*41c6e437SMariya Podchishchaeva #embed <
10*41c6e437SMariya Podchishchaeva // expected-error@-1 {{expected '>'}} \
11*41c6e437SMariya Podchishchaeva    expected-note@-1 {{to match this '<'}}
12*41c6e437SMariya Podchishchaeva 
13*41c6e437SMariya Podchishchaeva #embed "
14*41c6e437SMariya Podchishchaeva // expected-error@-1 {{expected "FILENAME" or <FILENAME>}} \
15*41c6e437SMariya Podchishchaeva    expected-warning@-1 {{missing terminating '"' character}}
16*41c6e437SMariya Podchishchaeva 
17*41c6e437SMariya Podchishchaeva #embed file.txt
18*41c6e437SMariya Podchishchaeva // expected-error@-1{{expected "FILENAME" or <FILENAME>}}
19*41c6e437SMariya Podchishchaeva 
20*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" xxx
21*41c6e437SMariya Podchishchaeva // expected-error@-1 {{unknown embed preprocessor parameter 'xxx'}}
22*41c6e437SMariya Podchishchaeva 
23*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" xxx::
24*41c6e437SMariya Podchishchaeva // expected-error@-1 {{expected identifier}}
25*41c6e437SMariya Podchishchaeva 
26*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" xxx::xxx
27*41c6e437SMariya Podchishchaeva // expected-error@-1 {{unknown embed preprocessor parameter 'xxx::xxx'}}
28*41c6e437SMariya Podchishchaeva 
29*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" xxx::42
30*41c6e437SMariya Podchishchaeva // expected-error@-1 {{expected identifier}}
31*41c6e437SMariya Podchishchaeva 
32*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" limit
33*41c6e437SMariya Podchishchaeva // expected-error@-1 {{expected '('}}
34*41c6e437SMariya Podchishchaeva 
35*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" limit(
36*41c6e437SMariya Podchishchaeva // expected-error@-1 {{expected value in expression}}
37*41c6e437SMariya Podchishchaeva 
38*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" limit(xxx
39*41c6e437SMariya Podchishchaeva // expected-error@-1 {{expected ')'}}
40*41c6e437SMariya Podchishchaeva 
41*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" limit(42
42*41c6e437SMariya Podchishchaeva // expected-error@-1 {{expected ')'}}
43*41c6e437SMariya Podchishchaeva 
44*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" limit([
45*41c6e437SMariya Podchishchaeva // expected-error@-1 {{invalid token at start of a preprocessor expression}}
46*41c6e437SMariya Podchishchaeva 
47*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" limit([)
48*41c6e437SMariya Podchishchaeva // expected-error@-1 {{invalid token at start of a preprocessor expression}}
49*41c6e437SMariya Podchishchaeva 
50*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" limit(1/0)
51*41c6e437SMariya Podchishchaeva // expected-error@-1 {{division by zero in preprocessor expression}}
52*41c6e437SMariya Podchishchaeva 
53*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" clang::offset
54*41c6e437SMariya Podchishchaeva // expected-error@-1 {{expected '('}}
55*41c6e437SMariya Podchishchaeva 
56*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" clang::offset(
57*41c6e437SMariya Podchishchaeva // expected-error@-1 {{expected value in expression}}
58*41c6e437SMariya Podchishchaeva 
59*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" clang::offset(xxx
60*41c6e437SMariya Podchishchaeva // expected-error@-1 {{expected ')'}}
61*41c6e437SMariya Podchishchaeva 
62*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" clang::offset(42
63*41c6e437SMariya Podchishchaeva // expected-error@-1 {{expected ')'}}
64*41c6e437SMariya Podchishchaeva 
65*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" clang::offset([
66*41c6e437SMariya Podchishchaeva // expected-error@-1 {{invalid token at start of a preprocessor expression}}
67*41c6e437SMariya Podchishchaeva 
68*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" clang::offset([)
69*41c6e437SMariya Podchishchaeva // expected-error@-1 {{invalid token at start of a preprocessor expression}}
70*41c6e437SMariya Podchishchaeva 
71*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" clang::offset(1/0)
72*41c6e437SMariya Podchishchaeva // expected-error@-1 {{division by zero in preprocessor expression}}
73*41c6e437SMariya Podchishchaeva 
74*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" clang::offset 42
75*41c6e437SMariya Podchishchaeva // expected-error@-1 {{expected '('}}
76*41c6e437SMariya Podchishchaeva 
77*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" prefix
78*41c6e437SMariya Podchishchaeva // expected-error@-1 {{expected '('}}
79*41c6e437SMariya Podchishchaeva 
80*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" prefix(
81*41c6e437SMariya Podchishchaeva // expected-error@-1 {{expected ')'}}
82*41c6e437SMariya Podchishchaeva 
83*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" prefix(xxx
84*41c6e437SMariya Podchishchaeva // expected-error@-1 {{expected ')'}}
85*41c6e437SMariya Podchishchaeva 
86*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" prefix(1/0) // OK: emitted as tokens, not evaluated yet.
87*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" prefix(([{}])) // OK: delimiters balanced
88*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" prefix(([{)]})
89*41c6e437SMariya Podchishchaeva // expected-error@-1 {{expected '}'}} expected-note@-1 {{to match this '{'}}
90*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" prefix(([{})})
91*41c6e437SMariya Podchishchaeva // expected-error@-1 {{expected ']'}} expected-note@-1 {{to match this '['}}
92*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" prefix(([{}]})
93*41c6e437SMariya Podchishchaeva // expected-error@-1 {{expected ')'}} expected-note@-1 {{to match this '('}}
94*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" prefix() // OK: tokens within parens are optional
95*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" prefix)
96*41c6e437SMariya Podchishchaeva // expected-error@-1 {{expected '('}}
97*41c6e437SMariya Podchishchaeva 
98*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" suffix
99*41c6e437SMariya Podchishchaeva // expected-error@-1 {{expected '('}}
100*41c6e437SMariya Podchishchaeva 
101*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" suffix(
102*41c6e437SMariya Podchishchaeva // expected-error@-1 {{expected ')'}}
103*41c6e437SMariya Podchishchaeva 
104*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" suffix(xxx
105*41c6e437SMariya Podchishchaeva // expected-error@-1 {{expected ')'}}
106*41c6e437SMariya Podchishchaeva 
107*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" suffix(1/0) // OK: emitted as tokens, not evaluated yet.
108*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" suffix(([{}])) // OK: delimiters balanced
109*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" suffix(([{)]})
110*41c6e437SMariya Podchishchaeva // expected-error@-1 {{expected '}'}} expected-note@-1 {{to match this '{'}}
111*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" suffix(([{})})
112*41c6e437SMariya Podchishchaeva // expected-error@-1 {{expected ']'}} expected-note@-1 {{to match this '['}}
113*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" suffix(([{}]})
114*41c6e437SMariya Podchishchaeva // expected-error@-1 {{expected ')'}} expected-note@-1 {{to match this '('}}
115*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" suffix() // OK: tokens within parens are optional
116*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" suffix)
117*41c6e437SMariya Podchishchaeva // expected-error@-1 {{expected '('}}
118*41c6e437SMariya Podchishchaeva 
119*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" if_empty(1/0) // OK: emitted as tokens, not evaluated yet.
120*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" if_empty(([{}])) // OK: delimiters balanced
121*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" if_empty(([{)]})
122*41c6e437SMariya Podchishchaeva // expected-error@-1 {{expected '}'}} expected-note@-1 {{to match this '{'}}
123*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" if_empty(([{})})
124*41c6e437SMariya Podchishchaeva // expected-error@-1 {{expected ']'}} expected-note@-1 {{to match this '['}}
125*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" if_empty(([{}]})
126*41c6e437SMariya Podchishchaeva // expected-error@-1 {{expected ')'}} expected-note@-1 {{to match this '('}}
127*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" if_empty() // OK: tokens within parens are optional
128*41c6e437SMariya Podchishchaeva #embed "embed_parsing_errors.c" if_empty)
129*41c6e437SMariya Podchishchaeva // expected-error@-1 {{expected '('}}
130*41c6e437SMariya Podchishchaeva };
131