141c6e437SMariya Podchishchaeva // RUN: %clang_cc1 %s -fsyntax-only --embed-dir=%S/Inputs -verify -Wno-c23-extensions 241c6e437SMariya Podchishchaeva // RUN: %clang_cc1 %s -fsyntax-only --embed-dir=%S/Inputs -verify -fexperimental-new-constant-interpreter -Wno-c23-extensions 3dba2e66eSMariya Podchishchaeva // expected-no-diagnostics 441c6e437SMariya Podchishchaeva 541c6e437SMariya Podchishchaeva constexpr int value(int a, int b) { 641c6e437SMariya Podchishchaeva return a + b; 741c6e437SMariya Podchishchaeva } 841c6e437SMariya Podchishchaeva 941c6e437SMariya Podchishchaeva constexpr int func_call() { 1041c6e437SMariya Podchishchaeva return value( 1141c6e437SMariya Podchishchaeva #embed <jk.txt> 1241c6e437SMariya Podchishchaeva ); 1341c6e437SMariya Podchishchaeva } 1441c6e437SMariya Podchishchaeva 1541c6e437SMariya Podchishchaeva constexpr int init_list_expr() { 1641c6e437SMariya Podchishchaeva int vals[] = { 1741c6e437SMariya Podchishchaeva #embed <jk.txt> 1841c6e437SMariya Podchishchaeva }; 1941c6e437SMariya Podchishchaeva return value(vals[0], vals[1]); 2041c6e437SMariya Podchishchaeva } 2141c6e437SMariya Podchishchaeva 2241c6e437SMariya Podchishchaeva template <int N, int M> 2341c6e437SMariya Podchishchaeva struct Hurr { 2441c6e437SMariya Podchishchaeva static constexpr int V1 = N; 2541c6e437SMariya Podchishchaeva static constexpr int V2 = M; 2641c6e437SMariya Podchishchaeva }; 2741c6e437SMariya Podchishchaeva 2841c6e437SMariya Podchishchaeva constexpr int template_args() { 2941c6e437SMariya Podchishchaeva Hurr< 3041c6e437SMariya Podchishchaeva #embed <jk.txt> 3141c6e437SMariya Podchishchaeva > H; 3241c6e437SMariya Podchishchaeva return value(H.V1, H.V2); 3341c6e437SMariya Podchishchaeva } 3441c6e437SMariya Podchishchaeva 3541c6e437SMariya Podchishchaeva constexpr int ExpectedValue = 'j' + 'k'; 3641c6e437SMariya Podchishchaeva static_assert(func_call() == ExpectedValue); 3741c6e437SMariya Podchishchaeva static_assert(init_list_expr() == ExpectedValue); 3841c6e437SMariya Podchishchaeva static_assert(template_args() == ExpectedValue); 3941c6e437SMariya Podchishchaeva 4041c6e437SMariya Podchishchaeva static_assert( 4141c6e437SMariya Podchishchaeva #embed <jk.txt> limit(1) suffix(== 'j') 4241c6e437SMariya Podchishchaeva ); 4341c6e437SMariya Podchishchaeva 4441c6e437SMariya Podchishchaeva int array[ 4541c6e437SMariya Podchishchaeva #embed <jk.txt> limit(1) 4641c6e437SMariya Podchishchaeva ]; 4741c6e437SMariya Podchishchaeva static_assert(sizeof(array) / sizeof(int) == 'j'); 4841c6e437SMariya Podchishchaeva 4941c6e437SMariya Podchishchaeva constexpr int comma_expr = ( 50dba2e66eSMariya Podchishchaeva #embed <jk.txt> 5141c6e437SMariya Podchishchaeva ); 5241c6e437SMariya Podchishchaeva static_assert(comma_expr == 'k'); 5341c6e437SMariya Podchishchaeva 5441c6e437SMariya Podchishchaeva constexpr int comma_expr_init_list{ ( 5541c6e437SMariya Podchishchaeva #embed <jk.txt> limit(1) 5641c6e437SMariya Podchishchaeva ) }; 5741c6e437SMariya Podchishchaeva static_assert(comma_expr_init_list == 'j'); 5841c6e437SMariya Podchishchaeva 5941c6e437SMariya Podchishchaeva constexpr int paren_init( 6041c6e437SMariya Podchishchaeva #embed <jk.txt> limit(1) 6141c6e437SMariya Podchishchaeva ); 6241c6e437SMariya Podchishchaeva static_assert(paren_init == 'j'); 6341c6e437SMariya Podchishchaeva 6441c6e437SMariya Podchishchaeva struct S { 6541c6e437SMariya Podchishchaeva const char buffer[2] = { 6641c6e437SMariya Podchishchaeva #embed "jk.txt" 6741c6e437SMariya Podchishchaeva }; 6841c6e437SMariya Podchishchaeva }; 6941c6e437SMariya Podchishchaeva 7041c6e437SMariya Podchishchaeva constexpr struct S s; 7141c6e437SMariya Podchishchaeva static_assert(s.buffer[1] == 'k'); 7241c6e437SMariya Podchishchaeva 7341c6e437SMariya Podchishchaeva struct S1 { 7441c6e437SMariya Podchishchaeva int x, y; 7541c6e437SMariya Podchishchaeva }; 7641c6e437SMariya Podchishchaeva 7741c6e437SMariya Podchishchaeva struct T { 7841c6e437SMariya Podchishchaeva int x, y; 7941c6e437SMariya Podchishchaeva struct S1 s; 8041c6e437SMariya Podchishchaeva }; 8141c6e437SMariya Podchishchaeva 8241c6e437SMariya Podchishchaeva constexpr struct T t[] = { 8341c6e437SMariya Podchishchaeva #embed <numbers.txt> 8441c6e437SMariya Podchishchaeva }; 8541c6e437SMariya Podchishchaeva static_assert(t[0].s.x == '2'); 8641c6e437SMariya Podchishchaeva 8741c6e437SMariya Podchishchaeva constexpr int func(int i, int) { return i; } 8841c6e437SMariya Podchishchaeva static_assert( 8941c6e437SMariya Podchishchaeva func( 9041c6e437SMariya Podchishchaeva #embed <jk.txt> 9141c6e437SMariya Podchishchaeva ) == 'j'); 9241c6e437SMariya Podchishchaeva 9341c6e437SMariya Podchishchaeva template <int N> 9441c6e437SMariya Podchishchaeva struct ST {}; 9541c6e437SMariya Podchishchaeva 9641c6e437SMariya Podchishchaeva ST< 9741c6e437SMariya Podchishchaeva #embed <jk.txt> limit(1) 9841c6e437SMariya Podchishchaeva > st; 99*a5b5208bSMariya Podchishchaeva 100*a5b5208bSMariya Podchishchaeva struct HasCharArray { unsigned char h[10]; }; 101*a5b5208bSMariya Podchishchaeva struct Wrapper { int a; struct HasCharArray d; }; 102*a5b5208bSMariya Podchishchaeva constexpr struct Wrapper W = { 103*a5b5208bSMariya Podchishchaeva #embed "numbers.txt" 104*a5b5208bSMariya Podchishchaeva }; 105*a5b5208bSMariya Podchishchaeva 106*a5b5208bSMariya Podchishchaeva static_assert(W.d.h[2] == '3'); 107