Last active
October 6, 2016 11:59
-
-
Save NicoHood/486364ee191313e1a36d91bb33fba9ef to your computer and use it in GitHub Desktop.
static assert avr-gcc bugs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <assert.h> | |
static_assert((sizeof(char) == sizeof(long)),"Please use -fshort-enums to compile this source"); | |
int main() | |
{ | |
return 0; | |
} | |
[arch@arch tmp]$ nano main.c | |
[arch@arch tmp]$ avr-gcc main.c | |
main.c:3:19: error: expected declaration specifiers or '...' before '(' token | |
static_assert((sizeof(char) == sizeof(long)),"Please use -fshort-enums to compile this source"); | |
^ | |
main.c:3:50: error: expected declaration specifiers or '...' before string constant | |
static_assert((sizeof(char) == sizeof(long)),"Please use -fshort-enums to compile this source"); | |
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
[arch@arch tmp]$ gcc main.c | |
In file included from main.c:1:0: | |
main.c:3:5: error: static assertion failed: "Please use -fshort-enums to compile this source" | |
static_assert((sizeof(char) == sizeof(long)),"Please use -fshort-enums to compile this source"); | |
^ | |
[arch@arch tmp]$ gcc main.c -E | |
# 1 "main.c" | |
# 1 "<built-in>" | |
# 1 "<command-line>" | |
# 31 "<command-line>" | |
# 1 "/usr/include/stdc-predef.h" 1 3 4 | |
# 32 "<command-line>" 2 | |
# 1 "main.c" | |
# 1 "/usr/include/assert.h" 1 3 4 | |
# 35 "/usr/include/assert.h" 3 4 | |
# 1 "/usr/include/features.h" 1 3 4 | |
# 368 "/usr/include/features.h" 3 4 | |
# 1 "/usr/include/sys/cdefs.h" 1 3 4 | |
# 415 "/usr/include/sys/cdefs.h" 3 4 | |
# 1 "/usr/include/bits/wordsize.h" 1 3 4 | |
# 416 "/usr/include/sys/cdefs.h" 2 3 4 | |
# 369 "/usr/include/features.h" 2 3 4 | |
# 392 "/usr/include/features.h" 3 4 | |
# 1 "/usr/include/gnu/stubs.h" 1 3 4 | |
# 10 "/usr/include/gnu/stubs.h" 3 4 | |
# 1 "/usr/include/gnu/stubs-64.h" 1 3 4 | |
# 11 "/usr/include/gnu/stubs.h" 2 3 4 | |
# 393 "/usr/include/features.h" 2 3 4 | |
# 36 "/usr/include/assert.h" 2 3 4 | |
# 64 "/usr/include/assert.h" 3 4 | |
# 67 "/usr/include/assert.h" 3 4 | |
extern void __assert_fail (const char *__assertion, const char *__file, | |
unsigned int __line, const char *__function) | |
__attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__)); | |
extern void __assert_perror_fail (int __errnum, const char *__file, | |
unsigned int __line, const char *__function) | |
__attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__)); | |
extern void __assert (const char *__assertion, const char *__file, int __line) | |
__attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__)); | |
# 2 "main.c" 2 | |
_Static_assert | |
# 3 "main.c" | |
((sizeof(char) == sizeof(long)),"Please use -fshort-enums to compile this source"); | |
int main() | |
{ | |
return 0; | |
} | |
[arch@arch tmp]$ avr-gcc main.c -E | |
# 1 "main.c" | |
# 1 "<built-in>" | |
# 1 "<command-line>" | |
# 1 "main.c" | |
# 1 "/usr/avr/include/assert.h" 1 3 | |
# 65 "/usr/avr/include/assert.h" 3 | |
# 1 "/usr/avr/include/stdlib.h" 1 3 | |
# 48 "/usr/avr/include/stdlib.h" 3 | |
# 1 "/usr/lib/gcc/avr/6.2.0/include/stddef.h" 1 3 4 | |
# 216 "/usr/lib/gcc/avr/6.2.0/include/stddef.h" 3 4 | |
# 216 "/usr/lib/gcc/avr/6.2.0/include/stddef.h" 3 4 | |
typedef unsigned int size_t; | |
# 328 "/usr/lib/gcc/avr/6.2.0/include/stddef.h" 3 4 | |
typedef int wchar_t; | |
# 49 "/usr/avr/include/stdlib.h" 2 3 | |
# 70 "/usr/avr/include/stdlib.h" 3 | |
typedef struct { | |
int quot; | |
int rem; | |
} div_t; | |
typedef struct { | |
long quot; | |
long rem; | |
} ldiv_t; | |
typedef int (*__compar_fn_t)(const void *, const void *); | |
# 116 "/usr/avr/include/stdlib.h" 3 | |
extern void abort(void) __attribute__((__noreturn__)); | |
extern int abs(int __i) __attribute__((__const__)); | |
# 130 "/usr/avr/include/stdlib.h" 3 | |
extern long labs(long __i) __attribute__((__const__)); | |
# 153 "/usr/avr/include/stdlib.h" 3 | |
extern void *bsearch(const void *__key, const void *__base, size_t __nmemb, | |
size_t __size, int (*__compar)(const void *, const void *)); | |
extern div_t div(int __num, int __denom) __asm__("__divmodhi4") __attribute__((__const__)); | |
extern ldiv_t ldiv(long __num, long __denom) __asm__("__divmodsi4") __attribute__((__const__)); | |
# 185 "/usr/avr/include/stdlib.h" 3 | |
extern void qsort(void *__base, size_t __nmemb, size_t __size, | |
__compar_fn_t __compar); | |
# 218 "/usr/avr/include/stdlib.h" 3 | |
extern long strtol(const char *__nptr, char **__endptr, int __base); | |
# 252 "/usr/avr/include/stdlib.h" 3 | |
extern unsigned long strtoul(const char *__nptr, char **__endptr, int __base); | |
# 264 "/usr/avr/include/stdlib.h" 3 | |
extern long atol(const char *__s) __attribute__((__pure__)); | |
# 276 "/usr/avr/include/stdlib.h" 3 | |
extern int atoi(const char *__s) __attribute__((__pure__)); | |
# 288 "/usr/avr/include/stdlib.h" 3 | |
extern void exit(int __status) __attribute__((__noreturn__)); | |
# 300 "/usr/avr/include/stdlib.h" 3 | |
extern void *malloc(size_t __size) __attribute__((__malloc__)); | |
extern void free(void *__ptr); | |
extern size_t __malloc_margin; | |
extern char *__malloc_heap_start; | |
extern char *__malloc_heap_end; | |
extern void *calloc(size_t __nele, size_t __size) __attribute__((__malloc__)); | |
# 348 "/usr/avr/include/stdlib.h" 3 | |
extern void *realloc(void *__ptr, size_t __size) __attribute__((__malloc__)); | |
extern double strtod(const char *__nptr, char **__endptr); | |
extern double atof(const char *__nptr); | |
# 374 "/usr/avr/include/stdlib.h" 3 | |
extern int rand(void); | |
extern void srand(unsigned int __seed); | |
extern int rand_r(unsigned long *__ctx); | |
# 419 "/usr/avr/include/stdlib.h" 3 | |
extern __inline__ __attribute__((__gnu_inline__)) | |
char *itoa (int __val, char *__s, int __radix) | |
{ | |
if (!__builtin_constant_p (__radix)) { | |
extern char *__itoa (int, char *, int); | |
return __itoa (__val, __s, __radix); | |
} else if (__radix < 2 || __radix > 36) { | |
*__s = 0; | |
return __s; | |
} else { | |
extern char *__itoa_ncheck (int, char *, unsigned char); | |
return __itoa_ncheck (__val, __s, __radix); | |
} | |
} | |
# 464 "/usr/avr/include/stdlib.h" 3 | |
extern __inline__ __attribute__((__gnu_inline__)) | |
char *ltoa (long __val, char *__s, int __radix) | |
{ | |
if (!__builtin_constant_p (__radix)) { | |
extern char *__ltoa (long, char *, int); | |
return __ltoa (__val, __s, __radix); | |
} else if (__radix < 2 || __radix > 36) { | |
*__s = 0; | |
return __s; | |
} else { | |
extern char *__ltoa_ncheck (long, char *, unsigned char); | |
return __ltoa_ncheck (__val, __s, __radix); | |
} | |
} | |
# 507 "/usr/avr/include/stdlib.h" 3 | |
extern __inline__ __attribute__((__gnu_inline__)) | |
char *utoa (unsigned int __val, char *__s, int __radix) | |
{ | |
if (!__builtin_constant_p (__radix)) { | |
extern char *__utoa (unsigned int, char *, int); | |
return __utoa (__val, __s, __radix); | |
} else if (__radix < 2 || __radix > 36) { | |
*__s = 0; | |
return __s; | |
} else { | |
extern char *__utoa_ncheck (unsigned int, char *, unsigned char); | |
return __utoa_ncheck (__val, __s, __radix); | |
} | |
} | |
# 549 "/usr/avr/include/stdlib.h" 3 | |
extern __inline__ __attribute__((__gnu_inline__)) | |
char *ultoa (unsigned long __val, char *__s, int __radix) | |
{ | |
if (!__builtin_constant_p (__radix)) { | |
extern char *__ultoa (unsigned long, char *, int); | |
return __ultoa (__val, __s, __radix); | |
} else if (__radix < 2 || __radix > 36) { | |
*__s = 0; | |
return __s; | |
} else { | |
extern char *__ultoa_ncheck (unsigned long, char *, unsigned char); | |
return __ultoa_ncheck (__val, __s, __radix); | |
} | |
} | |
# 581 "/usr/avr/include/stdlib.h" 3 | |
extern long random(void); | |
extern void srandom(unsigned long __seed); | |
extern long random_r(unsigned long *__ctx); | |
# 640 "/usr/avr/include/stdlib.h" 3 | |
extern char *dtostre(double __val, char *__s, unsigned char __prec, | |
unsigned char __flags); | |
# 657 "/usr/avr/include/stdlib.h" 3 | |
extern char *dtostrf(double __val, signed char __width, | |
unsigned char __prec, char *__s); | |
# 676 "/usr/avr/include/stdlib.h" 3 | |
extern int atexit(void (*)(void)); | |
extern int system (const char *); | |
extern char *getenv (const char *); | |
# 66 "/usr/avr/include/assert.h" 2 3 | |
# 104 "/usr/avr/include/assert.h" 3 | |
extern void __assert(const char *__func, const char *__file, | |
int __lineno, const char *__sexp); | |
# 2 "main.c" 2 | |
# 3 "main.c" | |
static_assert((sizeof(char) == sizeof(long)),"Please use -fshort-enums to compile this source"); | |
int main() | |
{ | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment