-
Notifications
You must be signed in to change notification settings - Fork 17
Open
Description
With the test:
#include <stdio.h>
#define TEST(_arrsz, ...) \
do { \
int (*p)[_arrsz]; \
p = (void *)0; \
do { \
__VA_ARGS__ \
} while (0); \
printf("ptr: int(*p)[%s], statmemt: { %s }, operand evaluated : %d\n", \
#_arrsz, #__VA_ARGS__, (p != (void *)0)); \
} while (0)
#define TEST2(...) \
TEST(3, __VA_ARGS__); \
TEST(i, __VA_ARGS__)
void fn(int i) {
TEST2(__typeof__(*p++) var;);
// TEST2(typeof(*p++) var;);
TEST2(sizeof(*p++););
TEST2(_Alignof(*p++););
// TEST2( _Countof(*p++); );
}
int main(void) { fn(3); }
GCC/Clang
ptr: int(*p)[3], statmemt: { __typeof__(*p++) var; }, operand evaluated : 0
ptr: int(*p)[i], statmemt: { __typeof__(*p++) var; }, operand evaluated : 1
ptr: int(*p)[3], statmemt: { sizeof(*p++); }, operand evaluated : 0
ptr: int(*p)[i], statmemt: { sizeof(*p++); }, operand evaluated : 1
ptr: int(*p)[3], statmemt: { _Alignof(*p++); }, operand evaluated : 0
ptr: int(*p)[i], statmemt: { _Alignof(*p++); }, operand evaluated : 0
ptr: int(*p)[3], statmemt: { _Countof(*p++); }, operand evaluated : 0
ptr: int(*p)[i], statmemt: { _Countof(*p++); }, operand evaluated : 1
icc
:
ptr: int(*p)[3], statmemt: { __typeof__(*p++) var; }, operand evaluated : 0
ptr: int(*p)[i], statmemt: { __typeof__(*p++) var; }, operand evaluated : 0
ptr: int(*p)[3], statmemt: { sizeof(*p++); }, operand evaluated : 0
ptr: int(*p)[i], statmemt: { sizeof(*p++); }, operand evaluated : 1
ptr: int(*p)[3], statmemt: { _Alignof(*p++); }, operand evaluated : 0
ptr: int(*p)[i], statmemt: { _Alignof(*p++); }, operand evaluated : 0
Pelles C
ptr: int(*p)[3], statmemt: { __typeof__(*p++) var; }, operand evaluated : 0
ptr: int(*p)[i], statmemt: { __typeof__(*p++) var; }, operand evaluated : 0
ptr: int(*p)[3], statmemt: { sizeof(*p++); }, operand evaluated : 0
ptr: int(*p)[i], statmemt: { sizeof(*p++); }, operand evaluated : 0
DigitalMars C
ptr: int(*p)[3], statmemt: { sizeof(*p++); }, operand evaluated : 0
ptr: int(*p)[i], statmemt: { sizeof(*p++); }, operand evaluated : 0
TinyCC
,cproc
,kefir
,chibicc
,xcc
:
ptr: int(*p)[3], statmemt: { __typeof__(*p++) var; }, operand evaluated : 0
ptr: int(*p)[i], statmemt: { __typeof__(*p++) var; }, operand evaluated : 0
ptr: int(*p)[3], statmemt: { sizeof(*p++); }, operand evaluated : 0
ptr: int(*p)[i], statmemt: { sizeof(*p++); }, operand evaluated : 0
ptr: int(*p)[3], statmemt: { _Alignof(*p++); }, operand evaluated : 0
ptr: int(*p)[i], statmemt: { _Alignof(*p++); }, operand evaluated : 0
Metadata
Metadata
Assignees
Labels
No labels