Added #if control around GCC built-in functions so that the code can be (#1483)
compiled using non-GCC compilers.
This included adding an initialization to a variable that looks(!)
like it can reach a use before being initialized (b/c we turned
JERRY_UNREACHABLE into a nop) -- an example:
int foo;
switch (value_can_only_be_one_or_two)
case 1:
case 2:
foo = 5;
default:
JERRY_UNREACHABLE();
x = foo +1;
...the compiler assumes that the path can go through the default case,
which leaves the value of foo undefined.
JerryScript-DCO-1.0-Signed-off-by: Timothy Harvey t-harvey@ti.com
This commit is contained in:
committed by
Tilmann Scheller
parent
5d7972d053
commit
94b6aae52c
@@ -343,7 +343,7 @@ ecma_builtin_global_object_parse_int (ecma_value_t this_arg, /**< this argument
|
|||||||
while (string_curr_p > start_p)
|
while (string_curr_p > start_p)
|
||||||
{
|
{
|
||||||
ecma_char_t current_char = *(--string_curr_p);
|
ecma_char_t current_char = *(--string_curr_p);
|
||||||
ecma_number_t current_number;
|
ecma_number_t current_number = ECMA_NUMBER_MINUS_ONE;
|
||||||
|
|
||||||
if ((current_char >= LIT_CHAR_LOWERCASE_A && current_char <= LIT_CHAR_LOWERCASE_Z))
|
if ((current_char >= LIT_CHAR_LOWERCASE_A && current_char <= LIT_CHAR_LOWERCASE_Z))
|
||||||
{
|
{
|
||||||
|
|||||||
+11
-2
@@ -43,8 +43,13 @@
|
|||||||
/*
|
/*
|
||||||
* Conditions' likeliness, unlikeliness.
|
* Conditions' likeliness, unlikeliness.
|
||||||
*/
|
*/
|
||||||
#define likely(x) __builtin_expect (!!(x), 1)
|
#ifdef __GNUC__
|
||||||
#define unlikely(x) __builtin_expect (!!(x) , 0)
|
#define likely(x) __builtin_expect(!!(x), 1)
|
||||||
|
#define unlikely(x) __builtin_expect(!!(x), 0)
|
||||||
|
#else /* !__GNUC__ */
|
||||||
|
#define likely(x) (x)
|
||||||
|
#define unlikely(x) (x)
|
||||||
|
#endif /* __GNUC__ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Normally compilers store const(ant)s in ROM. Thus saving RAM.
|
* Normally compilers store const(ant)s in ROM. Thus saving RAM.
|
||||||
@@ -108,7 +113,11 @@ void __noreturn jerry_unreachable (const char *file, const char *function, const
|
|||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
#ifdef __GNUC__
|
||||||
#define JERRY_UNREACHABLE() __builtin_unreachable ()
|
#define JERRY_UNREACHABLE() __builtin_unreachable ()
|
||||||
|
#else /* !__GNUC__ */
|
||||||
|
#define JERRY_UNREACHABLE()
|
||||||
|
#endif /* __GNUC__ */
|
||||||
#endif /* !JERRY_NDEBUG */
|
#endif /* !JERRY_NDEBUG */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ extern "C"
|
|||||||
#define assert(x) \
|
#define assert(x) \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
if (__builtin_expect (!(x), 0)) \
|
if (!(x)) \
|
||||||
{ \
|
{ \
|
||||||
fprintf (stderr, "%s:%d: %s: Assertion `%s' failed.", __FILE__, __LINE__, __func__, #x); \
|
fprintf (stderr, "%s:%d: %s: Assertion `%s' failed.", __FILE__, __LINE__, __func__, #x); \
|
||||||
abort (); \
|
abort (); \
|
||||||
|
|||||||
Reference in New Issue
Block a user