-
Notifications
You must be signed in to change notification settings - Fork 14.5k
Open
Open
Copy link
Labels
c23clang:frontendLanguage frontend issues, e.g. anything involving "Sema"Language frontend issues, e.g. anything involving "Sema"enhancementImproving things as opposed to bug fixing, e.g. new or missing featureImproving things as opposed to bug fixing, e.g. new or missing featurequality-of-implementation
Description
Here's a small reproducer:
alx@devuan:~/tmp$ cat cnt.c
#include <stdlib.h>
#include <assert.h>
#define must_be(e) \
( \
0 * (int) sizeof( \
struct { \
static_assert(e, ""); \
int ISO_C_forbids_a_struct_with_no_members_; \
} \
) \
)
#define is_same_type(a, b) \
( \
__builtin_types_compatible_p(a, b) \
)
#define is_same_typeof(a, b) \
( \
is_same_type(typeof(a), typeof(b)) \
)
#define is_array(a) \
( \
!is_same_typeof(a, &(a)[0]) \
)
int
main(void)
{
return must_be(is_array(((int []) {rand(), rand()})));
}
alx@devuan:~/tmp$ gcc -Wall -Wextra -S cnt.c
alx@devuan:~/tmp$
alx@devuan:~/tmp$ clang -Wall -Wextra -S cnt.c
cnt.c:34:37: error: initializer element is not a compile-time constant
34 | return must_be(is_array(((int []) {rand(), rand()})));
| ^~~~~~
cnt.c:27:25: note: expanded from macro 'is_array'
27 | !is_same_typeof(a, &(a)[0]) \
| ^
cnt.c:22:29: note: expanded from macro 'is_same_typeof'
22 | is_same_type(typeof(a), typeof(b)) \
| ^
cnt.c:17:38: note: expanded from macro 'is_same_type'
17 | __builtin_types_compatible_p(a, b) \
| ^
cnt.c:9:39: note: expanded from macro 'must_be'
9 | static_assert(e, ""); \
| ^
1 error generated.
Please include the following in an eventual fix:
Reported-by: "Basil L. Contovounesios" <[email protected]>
Reported-by: Alejandro Colomar <[email protected]>
Metadata
Metadata
Assignees
Labels
c23clang:frontendLanguage frontend issues, e.g. anything involving "Sema"Language frontend issues, e.g. anything involving "Sema"enhancementImproving things as opposed to bug fixing, e.g. new or missing featureImproving things as opposed to bug fixing, e.g. new or missing featurequality-of-implementation