| // RUN: %clang_cc1 -Wno-error=return-type -std=c++23 -fsyntax-only -Wimplicit-fallthrough -Wconsumed -verify %s |
| |
| constexpr int f() { } // expected-warning {{non-void function does not return a value}} |
| static_assert(__is_same(decltype([] constexpr -> int { }( )), int)); // expected-warning {{non-void lambda does not return a value}} |
| |
| consteval int g() { } // expected-warning {{non-void function does not return a value}} |
| static_assert(__is_same(decltype([] consteval -> int { }( )), int)); // expected-warning {{non-void lambda does not return a value}} |
| |
| namespace GH116485 { |
| int h() { |
| if consteval { } |
| } // expected-warning {{non-void function does not return a value}} |
| |
| void i(int x) { |
| if consteval { |
| } |
| switch (x) { |
| case 1: |
| i(1); |
| case 2: // expected-warning {{unannotated fall-through between switch labels}} \ |
| // expected-note {{insert 'break;' to avoid fall-through}} |
| break; |
| } |
| } |
| |
| constexpr bool j() { |
| if !consteval { return true; } |
| } // expected-warning {{non-void function does not return a value in all control paths}} \ |
| // expected-note {{control reached end of constexpr function}} |
| |
| bool k = j(); |
| constinit bool l = j(); // expected-error {{variable does not have a constant initializer}} \ |
| // expected-note {{required by 'constinit' specifier here}} \ |
| // expected-note {{in call to 'j()'}} |
| |
| } |
| |
| namespace GH117385 { |
| void f() { |
| if consteval { |
| } |
| } |
| } |