// RUN: %clang_cc1 %s -fsyntax-only --embed-dir=%S/Inputs -verify -Wno-c23-extensions // RUN: %clang_cc1 %s -fsyntax-only --embed-dir=%S/Inputs -verify -fexperimental-new-constant-interpreter -Wno-c23-extensions // expected-no-diagnostics constexpr int value(int a, int b) { return a + b; } constexpr int func_call() { return value( #embed ); } constexpr int init_list_expr() { int vals[] = { #embed }; return value(vals[0], vals[1]); } template struct Hurr { static constexpr int V1 = N; static constexpr int V2 = M; }; constexpr int template_args() { Hurr< #embed > H; return value(H.V1, H.V2); } constexpr int ExpectedValue = 'j' + 'k'; static_assert(func_call() == ExpectedValue); static_assert(init_list_expr() == ExpectedValue); static_assert(template_args() == ExpectedValue); static_assert( #embed limit(1) suffix(== 'j') ); int array[ #embed limit(1) ]; static_assert(sizeof(array) / sizeof(int) == 'j'); constexpr int comma_expr = ( #embed ); static_assert(comma_expr == 'k'); constexpr int comma_expr_init_list{ ( #embed limit(1) ) }; static_assert(comma_expr_init_list == 'j'); constexpr int paren_init( #embed limit(1) ); static_assert(paren_init == 'j'); struct S { const char buffer[2] = { #embed "jk.txt" }; }; constexpr struct S s; static_assert(s.buffer[1] == 'k'); struct S1 { int x, y; }; struct T { int x, y; struct S1 s; }; constexpr struct T t[] = { #embed }; static_assert(t[0].s.x == '2'); constexpr int func(int i, int) { return i; } static_assert( func( #embed ) == 'j'); template struct ST {}; ST< #embed limit(1) > st; struct HasCharArray { unsigned char h[10]; }; struct Wrapper { int a; struct HasCharArray d; }; constexpr struct Wrapper W = { #embed "numbers.txt" }; static_assert(W.d.h[2] == '3');