| // RUN: %clang_cc1 -triple x86_64-linux -std=c23 -fsyntax-only -verify %s |
| // expected-no-diagnostics |
| |
| #define INT64_MIN (-9223372036854775807LL - 1) |
| |
| void t1() { |
| { |
| enum { A }; |
| enum { B }; |
| |
| _Static_assert(_Generic(A, typeof(B): 1, default: 0) == 1, ""); |
| _Static_assert(_Generic(typeof(A), typeof(B): 1, default: 0) == 1, ""); |
| } |
| |
| { |
| _Static_assert( |
| _Generic(typeof(enum {A}), typeof(enum {B}): 1, default: 0) == 0, ""); |
| } |
| } |
| |
| void t2() { |
| { |
| enum : int { A }; |
| enum : int { B }; |
| |
| _Static_assert(_Generic(A, typeof(B): 1, default: 0) == 0, ""); |
| _Static_assert(_Generic(typeof(A), typeof(B): 1, default: 0) == 0, ""); |
| } |
| |
| { |
| _Static_assert( |
| _Generic(typeof(enum : int{A}), typeof(enum : int{B}): 1, default: 0) == 0, ""); |
| } |
| } |
| |
| void t3() { |
| { |
| enum { A = INT64_MIN }; |
| enum { B = INT64_MIN }; |
| |
| _Static_assert(_Generic(A, __typeof__(B): 1, default: 0) == 0, ""); |
| _Static_assert(_Generic(__typeof__(A), __typeof__(B): 1, default: 0) == 0, ""); |
| } |
| |
| { |
| enum : long long { A = INT64_MIN }; |
| enum : long long { B = INT64_MIN }; |
| |
| _Static_assert(_Generic(A, __typeof__(B): 1, default: 0) == 0, ""); |
| _Static_assert(_Generic(__typeof__(A), __typeof__(B): 1, default: 0) == 0, ""); |
| } |
| } |
| |
| void t4() { |
| enum : int { A }; |
| enum : int { B }; |
| |
| _Static_assert(_Generic(A, typeof(B): 1, typeof(A): 2, default: 0) == 2, ""); |
| } |