xref: /aosp_15_r20/external/cronet/base/logging_nocompile.nc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker// Copyright 2023 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker// Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker// found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker
5*6777b538SAndroid Build Coastguard Worker// This is a "No Compile Test" suite.
6*6777b538SAndroid Build Coastguard Worker// https://dev.chromium.org/developers/testing/no-compile-tests
7*6777b538SAndroid Build Coastguard Worker
8*6777b538SAndroid Build Coastguard Worker#include "base/logging.h"
9*6777b538SAndroid Build Coastguard Worker
10*6777b538SAndroid Build Coastguard Worker// LOG(FATAL) must be understood as [[noreturn]].
11*6777b538SAndroid Build Coastguard Workerint Foo() {
12*6777b538SAndroid Build Coastguard Worker  LOG(FATAL) << "I am [[noreturn]]!";
13*6777b538SAndroid Build Coastguard Worker  return 42;  // expected-error {{'return' will never be executed}}
14*6777b538SAndroid Build Coastguard Worker}
15*6777b538SAndroid Build Coastguard Worker
16*6777b538SAndroid Build Coastguard Workerint Foo2() {
17*6777b538SAndroid Build Coastguard Worker  LOG_ASSERT(false) << "I am [[noreturn]] (sometimes)!";
18*6777b538SAndroid Build Coastguard Worker  return 42;  // expected-error {{'return' will never be executed}}
19*6777b538SAndroid Build Coastguard Worker}
20*6777b538SAndroid Build Coastguard Worker
21*6777b538SAndroid Build Coastguard Worker// It's important that our logging macros agree on [[noreturn]] in all build
22*6777b538SAndroid Build Coastguard Worker// configurations (or dead-code warnings become impossible to satisfy). As such
23*6777b538SAndroid Build Coastguard Worker// neither LOG(DFATAL) or DLOG(FATAL) may be understood as [[noreturn]]. This
24*6777b538SAndroid Build Coastguard Worker// non-void function not returning a value after LOG(DFATAL) and DLOG(FATAL)
25*6777b538SAndroid Build Coastguard Worker// should always be a compile error due to a missing return statement.
26*6777b538SAndroid Build Coastguard Workerint Bar() {
27*6777b538SAndroid Build Coastguard Worker  // No LOG(DFATAL) macros should be understood as [[noreturn]] under any build
28*6777b538SAndroid Build Coastguard Worker  // configurations.
29*6777b538SAndroid Build Coastguard Worker  LOG(DFATAL) << "I am not [[noreturn]]!";
30*6777b538SAndroid Build Coastguard Worker  LOG_IF(DFATAL, true) << "I am not [[noreturn]]!";
31*6777b538SAndroid Build Coastguard Worker  PLOG(DFATAL) << "I am not [[noreturn]]!";
32*6777b538SAndroid Build Coastguard Worker  PLOG_IF(DFATAL, true) << "I am not [[noreturn]]!";
33*6777b538SAndroid Build Coastguard Worker
34*6777b538SAndroid Build Coastguard Worker  // Same as above but DLOG(FATAL) instead of LOG(DFATAL).
35*6777b538SAndroid Build Coastguard Worker  DLOG(FATAL) << "I am not [[noreturn]]!";
36*6777b538SAndroid Build Coastguard Worker  DLOG_IF(FATAL, true) << "I am not [[noreturn]]!";
37*6777b538SAndroid Build Coastguard Worker  DPLOG(FATAL) << "I am not [[noreturn]]!";
38*6777b538SAndroid Build Coastguard Worker  DPLOG_IF(FATAL, true) << "I am not [[noreturn]]!";
39*6777b538SAndroid Build Coastguard Worker  DLOG_ASSERT(false) << "I am not [[noreturn]]!";
40*6777b538SAndroid Build Coastguard Worker}  // expected-error {{non-void function does not return a value}}
41