| // Part of the Crubit project, under the Apache License v2.0 with LLVM |
| // Exceptions. See /LICENSE for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| |
| // Tests for control flow involving binary operators. |
| |
| #include "nullability_test.h" |
| |
| TEST void testAnd(Nullable<int *> x, Nullable<int *> y) { |
| if (x && y) { |
| nonnull(x); |
| nonnull(y); |
| // Type hasn't changed, even though we know x and y are nonnull. |
| type<Nullable<int *>>(x); |
| type<Nullable<int *>>(y); |
| } else { |
| nullable(x); |
| nullable(y); |
| } |
| nullable(x); |
| nullable(y); |
| } |
| |
| TEST void testOr(Nullable<int *> x, Nullable<int *> y) { |
| if (x || y) { |
| nullable(x); |
| nullable(y); |
| } else { |
| nullable(x); |
| nullable(y); |
| } |
| nullable(x); |
| nullable(y); |
| } |
| |
| TEST void testNeither(Nullable<int *> x, Nullable<int *> y) { |
| if (!x && !y) { |
| nullable(x); |
| nullable(y); |
| } else { |
| nullable(x); |
| nullable(y); |
| } |
| nullable(x); |
| nullable(y); |
| } |
| |
| TEST void testNotBoth(Nullable<int *> x, Nullable<int *> y) { |
| if (!x || !y) { |
| nullable(x); |
| nullable(y); |
| } else { |
| nonnull(x); |
| nonnull(y); |
| } |
| nullable(x); |
| nullable(y); |
| } |