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