This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

LAUNCHXL-F28379D: Unable to print the error message of static_assert using the compiler

Part Number: LAUNCHXL-F28379D
Other Parts Discussed in Thread: C2000WARE

Tool/software:

I am using the C2000Ware 5.02 and am calling the following in my code:

_Static_assert(false, "MY ERROR");

No error is thrown when the condition is true. But when the condition is false, I get the following error at the same line:

error: the size of an array must be greater than zero

I am compiling with the c99 flag. Why do I not get MY ERROR at the assertion line in my compilation log?

  • Hello,

    I will loop in the compiler team for their input.

    Best Regards,

    Delaney

  • For the source file being compiled when the error diagnostic is emitted, please follow the directions in the article How to Submit a Compiler Test Case.

    Thanks and regards,

    -George

  • Hello George,

    Please find the attached preprocessed file and the build log along with the required details.

    1. Compiler Version: TMS320C2000 Linker PC v22.6.1

    2. Compiler Options Used: "C:\\ti\\ccs1270\\ccs\\utils\\bin\\gmake" -k -j 12 hello.obj -O 

    From the preprocessed file it is clear that the error message is ignored. Only the array is initialized with -1 size, and hence throws the error. But static_assert supports error messages since C11: Static assertion (since C11) - cppreference.com. How can I get the error message supported by static_assert? 

    #include <stdio.h>
    #include <assert.h>
    
    
    /**
     * hello.c
     */
    
    static_assert(2 + 2 * 2 == 5, "ERROR");
    
    int main(void)
    {
    	printf("Hello World!\n");
    	return 0;
    }
    
    /*****************************************************************************/
    /* STDIO.H                                                                   */
    /*                                                                           */
    /* Copyright (c) 1993 Texas Instruments Incorporated                         */
    /* http://www.ti.com/                                                        */
    /*                                                                           */
    /*  Redistribution and  use in source  and binary forms, with  or without    */
    /*  modification,  are permitted provided  that the  following conditions    */
    /*  are met:                                                                 */
    /*                                                                           */
    /*     Redistributions  of source  code must  retain the  above copyright    */
    /*     notice, this list of conditions and the following disclaimer.         */
    /*                                                                           */
    /*     Redistributions in binary form  must reproduce the above copyright    */
    /*     notice, this  list of conditions  and the following  disclaimer in    */
    /*     the  documentation  and/or   other  materials  provided  with  the    */
    /*     distribution.                                                         */
    /*                                                                           */
    /*     Neither the  name of Texas Instruments Incorporated  nor the names    */
    /*     of its  contributors may  be used to  endorse or  promote products    */
    /*     derived  from   this  software  without   specific  prior  written    */
    /*     permission.                                                           */
    /*                                                                           */
    /*  THIS SOFTWARE  IS PROVIDED BY THE COPYRIGHT  HOLDERS AND CONTRIBUTORS    */
    /*  "AS IS"  AND ANY  EXPRESS OR IMPLIED  WARRANTIES, INCLUDING,  BUT NOT    */
    /*  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR    */
    /*  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT    */
    /*  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,    */
    /*  SPECIAL,  EXEMPLARY,  OR CONSEQUENTIAL  DAMAGES  (INCLUDING, BUT  NOT    */
    /*  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,    */
    /*  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY    */
    /*  THEORY OF  LIABILITY, WHETHER IN CONTRACT, STRICT  LIABILITY, OR TORT    */
    /*  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE    */
    /*  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     */
    /*                                                                           */
    /*****************************************************************************/
    
    
    /*****************************************************************************/
    /* _ti_config.h                                                              */
    /*                                                                           */
    /* Copyright (c) 2017 Texas Instruments Incorporated                         */
    /* http://www.ti.com/                                                        */
    /*                                                                           */
    /*  Redistribution and  use in source  and binary forms, with  or without    */
    /*  modification,  are permitted provided  that the  following conditions    */
    /*  are met:                                                                 */
    /*                                                                           */
    /*     Redistributions  of source  code must  retain the  above copyright    */
    /*     notice, this list of conditions and the following disclaimer.         */
    /*                                                                           */
    /*     Redistributions in binary form  must reproduce the above copyright    */
    /*     notice, this  list of conditions  and the following  disclaimer in    */
    /*     the  documentation  and/or   other  materials  provided  with  the    */
    /*     distribution.                                                         */
    /*                                                                           */
    /*     Neither the  name of Texas Instruments Incorporated  nor the names    */
    /*     of its  contributors may  be used to  endorse or  promote products    */
    /*     derived  from   this  software  without   specific  prior  written    */
    /*     permission.                                                           */
    /*                                                                           */
    /*  THIS SOFTWARE  IS PROVIDED BY THE COPYRIGHT  HOLDERS AND CONTRIBUTORS    */
    /*  "AS IS"  AND ANY  EXPRESS OR IMPLIED  WARRANTIES, INCLUDING,  BUT NOT    */
    /*  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR    */
    /*  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT    */
    /*  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,    */
    /*  SPECIAL,  EXEMPLARY,  OR CONSEQUENTIAL  DAMAGES  (INCLUDING, BUT  NOT    */
    /*  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,    */
    /*  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY    */
    /*  THEORY OF  LIABILITY, WHETHER IN CONTRACT, STRICT  LIABILITY, OR TORT    */
    /*  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE    */
    /*  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     */
    /*                                                                           */
    /*****************************************************************************/
    
    
    /*Unsupported pragmas are omitted */
    # pragma diag_push
    # pragma CHECK_MISRA("-19.7")
    # pragma CHECK_MISRA("-19.4")
    # pragma CHECK_MISRA("-19.1")
    # pragma CHECK_MISRA("-19.15")
    # pragma diag_pop
    
    _Pragma("diag_push")
    _Pragma("CHECK_MISRA(\"-19.4\")")
    _Pragma("CHECK_MISRA(\"-19.1\")")
    _Pragma("CHECK_MISRA(\"-19.6\")")
    
    /* Hide uses of the TI proprietary macros behind other macros.
        Implementations that don't implement these features should leave
        these macros undefined. */
    
    
    
    /* Common definitions */
    
    /* C */
     /* C89/C99 */
    
    
    
    
    
    /* _TI_NOEXCEPT_CPP14 is defined to noexcept only when compiling for C++14. It
       is intended to be used for functions like abort and atexit that are supposed
       to be declared noexcept only in C++14 mode. */
    
    
    
    /* Target-specific definitions */
    /*****************************************************************************/
    /* linkage.h                                                                  */
    /*                                                                           */
    /* Copyright (c) 1998 Texas Instruments Incorporated                         */
    /* http://www.ti.com/                                                        */
    /*                                                                           */
    /*  Redistribution and  use in source  and binary forms, with  or without    */
    /*  modification,  are permitted provided  that the  following conditions    */
    /*  are met:                                                                 */
    /*                                                                           */
    /*     Redistributions  of source  code must  retain the  above copyright    */
    /*     notice, this list of conditions and the following disclaimer.         */
    /*                                                                           */
    /*     Redistributions in binary form  must reproduce the above copyright    */
    /*     notice, this  list of conditions  and the following  disclaimer in    */
    /*     the  documentation  and/or   other  materials  provided  with  the    */
    /*     distribution.                                                         */
    /*                                                                           */
    /*     Neither the  name of Texas Instruments Incorporated  nor the names    */
    /*     of its  contributors may  be used to  endorse or  promote products    */
    /*     derived  from   this  software  without   specific  prior  written    */
    /*     permission.                                                           */
    /*                                                                           */
    /*  THIS SOFTWARE  IS PROVIDED BY THE COPYRIGHT  HOLDERS AND CONTRIBUTORS    */
    /*  "AS IS"  AND ANY  EXPRESS OR IMPLIED  WARRANTIES, INCLUDING,  BUT NOT    */
    /*  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR    */
    /*  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT    */
    /*  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,    */
    /*  SPECIAL,  EXEMPLARY,  OR CONSEQUENTIAL  DAMAGES  (INCLUDING, BUT  NOT    */
    /*  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,    */
    /*  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY    */
    /*  THEORY OF  LIABILITY, WHETHER IN CONTRACT, STRICT  LIABILITY, OR TORT    */
    /*  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE    */
    /*  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     */
    /*                                                                           */
    /*****************************************************************************/
    
    
    #pragma diag_push
    #pragma CHECK_MISRA("-19.4") /* macros required for implementation */
    
    /* No modifiers needed to access code */
    
    
    /*--------------------------------------------------------------------------*/
    /* Define _DATA_ACCESS ==> how to access RTS global or static data          */
    /*--------------------------------------------------------------------------*/
    
    /*--------------------------------------------------------------------------*/
    /* Define _OPTIMIZE_FOR_SPACE ==> Always optimize for space.                */
    /*--------------------------------------------------------------------------*/
    
    /*--------------------------------------------------------------------------*/
    /* Define _IDECL ==> how inline functions are declared                      */
    /*--------------------------------------------------------------------------*/
    
    #pragma diag_pop
    
    
    _Pragma("diag_pop")
    
    /*****************************************************************************/
    /* stdarg.h                                                                  */
    /*                                                                           */
    /* Copyright (c) 1996 Texas Instruments Incorporated                         */
    /* http://www.ti.com/                                                        */
    /*                                                                           */
    /*  Redistribution and  use in source  and binary forms, with  or without    */
    /*  modification,  are permitted provided  that the  following conditions    */
    /*  are met:                                                                 */
    /*                                                                           */
    /*     Redistributions  of source  code must  retain the  above copyright    */
    /*     notice, this list of conditions and the following disclaimer.         */
    /*                                                                           */
    /*     Redistributions in binary form  must reproduce the above copyright    */
    /*     notice, this  list of conditions  and the following  disclaimer in    */
    /*     the  documentation  and/or   other  materials  provided  with  the    */
    /*     distribution.                                                         */
    /*                                                                           */
    /*     Neither the  name of Texas Instruments Incorporated  nor the names    */
    /*     of its  contributors may  be used to  endorse or  promote products    */
    /*     derived  from   this  software  without   specific  prior  written    */
    /*     permission.                                                           */
    /*                                                                           */
    /*  THIS SOFTWARE  IS PROVIDED BY THE COPYRIGHT  HOLDERS AND CONTRIBUTORS    */
    /*  "AS IS"  AND ANY  EXPRESS OR IMPLIED  WARRANTIES, INCLUDING,  BUT NOT    */
    /*  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR    */
    /*  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT    */
    /*  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,    */
    /*  SPECIAL,  EXEMPLARY,  OR CONSEQUENTIAL  DAMAGES  (INCLUDING, BUT  NOT    */
    /*  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,    */
    /*  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY    */
    /*  THEORY OF  LIABILITY, WHETHER IN CONTRACT, STRICT  LIABILITY, OR TORT    */
    /*  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE    */
    /*  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     */
    /*                                                                           */
    /*****************************************************************************/
    
    
    
    
    #pragma diag_push
    #pragma CHECK_MISRA("-20.1") /* standard headers must define standard names */
    #pragma CHECK_MISRA("-20.2") /* standard headers must define standard names */
    #pragma CHECK_MISRA("-19.7") /* macros required for implementation */
    #pragma CHECK_MISRA("-19.10") /* need types as macro arguments */
    
    /*-
     * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
     *
     * Copyright (c) 2002 Mike Barcroft <mike@FreeBSD.org>
     * All rights reserved.
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions
     * are met:
     * 1. Redistributions of source code must retain the above copyright
     *    notice, this list of conditions and the following disclaimer.
     * 2. Redistributions in binary form must reproduce the above copyright
     *    notice, this list of conditions and the following disclaimer in the
     *    documentation and/or other materials provided with the distribution.
     *
     * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
     * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
     * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     * SUCH DAMAGE.
     *
     * $FreeBSD$
     */
    
    
    /*-
     * SPDX-License-Identifier: BSD-3-Clause
     *
     * Copyright (c) 1991, 1993
     *	The Regents of the University of California.  All rights reserved.
     *
     * This code is derived from software contributed to Berkeley by
     * Berkeley Software Design, Inc.
     *
     * Redistribution and use in source and binary forms, with or without
     * modification, are permitted provided that the following conditions
     * are met:
     * 1. Redistributions of source code must retain the above copyright
     *    notice, this list of conditions and the following disclaimer.
     * 2. Redistributions in binary form must reproduce the above copyright
     *    notice, this list of conditions and the following disclaimer in the
     *    documentation and/or other materials provided with the distribution.
     * 3. Neither the name of the University nor the names of its contributors
     *    may be used to endorse or promote products derived from this software
     *    without specific prior written permission.
     *
     * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     * SUCH DAMAGE.
     *
     *	@(#)cdefs.h	8.8 (Berkeley) 1/9/95
     * $FreeBSD$
     */
    
    
    
    _Pragma("diag_push")
    _Pragma("CHECK_MISRA(\"none\")")
    
    /*
     * Testing against Clang-specific extensions.
     */
    
    
    /*
     * This code has been put in place to help reduce the addition of
     * compiler specific defines in FreeBSD code.  It helps to aid in
     * having a compiler-agnostic source tree.
     */
    
    
    
    
    
    
    
    /*
     * Macro to test if we're using a specific version of gcc or later.
     */
    
    /*
     * The __CONCAT macro is used to concatenate parts of symbol names, e.g.
     * with "#define OLD(foo) __CONCAT(old,foo)", OLD(foo) produces oldfoo.
     * The __CONCAT macro is a bit tricky to use if it must work in non-ANSI
     * mode -- there must be no spaces between its arguments, and for nested
     * __CONCAT's, all the __CONCAT's must be at the left.  __CONCAT can also
     * concatenate double-quoted strings produced by the __STRING macro, but
     * this only works with ANSI C.
     *
     * __XSTRING is like __STRING, but it expands any macros in its argument
     * first.  It is only available with ANSI C.
     */
    
    
    
    /*
     * Compiler-dependent macros to help declare dead (non-returning) and
     * pure (no side effects) functions, and unused variables.  They are
     * null except for versions of gcc that are known to support the features
     * properly (old versions of gcc-2 supported the dead and pure features
     * in a different (wrong) way).  If we do not provide an implementation
     * for a given compiler, let the compile fail if it is told to use
     * a feature that we cannot live without.
     */
    
    /*
     * TI ADD - check that __GNUC__ is defined before referencing it to avoid
     *          generating an error when __GNUC__ treated as zero warning is
     *          promoted to an error via -pdse195 option.
     */
    
    
    
    /*
     * Keywords added in C11.
     */
    
    
    
    
    /*
     * No native support for _Atomic(). Place object in structure to prevent
     * most forms of direct non-atomic access.
     */
    
    
    
    /*
     * XXX: Some compilers (Clang 3.3, GCC 4.7) falsely announce C++11 mode
     * without actually supporting the thread_local keyword. Don't check for
     * the presence of C++11 when defining _Thread_local.
     */
    
    
    /*
     * Emulation of C11 _Generic().  Unlike the previously defined C11
     * keywords, it is not possible to implement this using exactly the same
     * syntax.  Therefore implement something similar under the name
     * __generic().  Unlike _Generic(), this macro can only distinguish
     * between a single type, so it requires nested invocations to
     * distinguish multiple cases.
     */
    
    
    /*
     * C99 Static array indices in function parameter declarations.  Syntax such as:
     * void bar(int myArray[static 10]);
     * is allowed in C99 but not in C++.  Define __min_size appropriately so
     * headers using it can be compiled in either language.  Use like this:
     * void bar(int myArray[__min_size(10)]);
     */
    
    
    
    
    
    
    
    /* XXX: should use `#if __STDC_VERSION__ < 199901'. */
    
    
    /* C++11 exposes a load of C99 stuff */
    
    /*
     * GCC 2.95 provides `__restrict' as an extension to C90 to support the
     * C99-specific `restrict' type qualifier.  We happen to use `__restrict' as
     * a way to define the `restrict' type qualifier without disturbing older
     * software that is unaware of C99 keywords.
     * The TI compiler supports __restrict in all compilation modes.
     */
    
    /*
     * GNU C version 2.96 adds explicit branch prediction so that
     * the CPU back-end can hint the processor and also so that
     * code blocks can be reordered such that the predicted path
     * sees a more linear flow, thus improving cache behavior, etc.
     *
     * The following two macros provide us with a way to utilize this
     * compiler feature.  Use __predict_true() if you expect the expression
     * to evaluate to true, and __predict_false() if you expect the
     * expression to evaluate to false.
     *
     * A few notes about usage:
     *
     *	* Generally, __predict_false() error condition checks (unless
     *	  you have some _strong_ reason to do otherwise, in which case
     *	  document it), and/or __predict_true() `no-error' condition
     *	  checks, assuming you want to optimize for the no-error case.
     *
     *	* Other than that, if you don't know the likelihood of a test
     *	  succeeding from empirical or other `hard' evidence, don't
     *	  make predictions.
     *
     *	* These are meant to be used in places that are run `a lot'.
     *	  It is wasteful to make predictions in code that is run
     *	  seldomly (e.g. at subsystem initialization time) as the
     *	  basic block reordering that this affects can often generate
     *	  larger code.
     */
    
    
    /*
     * We define this here since <stddef.h>, <sys/queue.h>, and <sys/types.h>
     * require it.
     */
    
    /*
     * Given the pointer x to the member m of the struct s, return
     * a pointer to the containing structure.  When using GCC, we first
     * assign pointer x to a local variable, to check that its type is
     * compatible with member m.
     */
    
    /*
     * Compiler-dependent macros to declare that functions take printf-like
     * or scanf-like arguments.  They are null except for versions of gcc
     * that are known to support the features properly (old versions of gcc-2
     * didn't permit keeping the keywords out of the application namespace).
     */
    
    /* Compiler-dependent macros that rely on FreeBSD-specific extensions. */
    
    
    
    /*
     * The following definition might not work well if used in header files,
     * but it should be better than nothing.  If you want a "do nothing"
     * version, then it should generate some harmless declaration, such as:
     *    #define	__IDSTRING(name,string)	struct __hack
     */
    
    
    /*
     * Embed the rcs id of a source file in the resulting library.  Note that in
     * more recent ELF binutils, we use .ident allowing the ID to be stripped.
     * Usage:
     *	__FBSDID("$FreeBSD$");
     */
    
    
    
    
    
    
    
    
    /*-
     * The following definitions are an extension of the behavior originally
     * implemented in <sys/_posix.h>, but with a different level of granularity.
     * POSIX.1 requires that the macros we test be defined before any standard
     * header file is included.
     *
     * Here's a quick run-down of the versions:
     *  defined(_POSIX_SOURCE)		1003.1-1988
     *  _POSIX_C_SOURCE == 1		1003.1-1990
     *  _POSIX_C_SOURCE == 2		1003.2-1992 C Language Binding Option
     *  _POSIX_C_SOURCE == 199309		1003.1b-1993
     *  _POSIX_C_SOURCE == 199506		1003.1c-1995, 1003.1i-1995,
     *					and the omnibus ISO/IEC 9945-1: 1996
     *  _POSIX_C_SOURCE == 200112		1003.1-2001
     *  _POSIX_C_SOURCE == 200809		1003.1-2008
     *
     * In addition, the X/Open Portability Guide, which is now the Single UNIX
     * Specification, defines a feature-test macro which indicates the version of
     * that specification, and which subsumes _POSIX_C_SOURCE.
     *
     * Our macros begin with two underscores to avoid namespace screwage.
     */
    
    /* Deal with IEEE Std. 1003.1-1990, in which _POSIX_C_SOURCE == 1. */
    
    /* Deal with IEEE Std. 1003.2-1992, in which _POSIX_C_SOURCE == 2. */
    
    /* Deal with various X/Open Portability Guides and Single UNIX Spec. */
    
    /*
     * Deal with all versions of POSIX.  The ordering relative to the tests above is
     * important.
     */
    /*-
     * Deal with _ANSI_SOURCE:
     * If it is defined, and no other compilation environment is explicitly
     * requested, then define our internal feature-test macros to zero.  This
     * makes no difference to the preprocessor (undefined symbols in preprocessing
     * expressions are defined to have value zero), but makes it more convenient for
     * a test program to print out the values.
     *
     * If a program mistakenly defines _ANSI_SOURCE and some other macro such as
     * _POSIX_C_SOURCE, we will assume that it wants the broader compilation
     * environment (and in fact we will never get here).
     */
    
    /* User override __EXT1_VISIBLE */
    
    
    /*
     * Old versions of GCC use non-standard ARM arch symbols; acle-compat.h
     * translates them to __ARM_ARCH and the modern feature symbols defined by ARM.
     */
    
    /*
     * Nullability qualifiers: currently only supported by Clang.
     */
    
    /*
     * Type Safety Checking
     *
     * Clang provides additional attributes to enable checking type safety
     * properties that cannot be enforced by the C type system. 
     */
    
    
    /*
     * Lock annotations.
     *
     * Clang provides support for doing basic thread-safety tests at
     * compile-time, by marking which locks will/should be held when
     * entering/leaving a functions.
     *
     * Furthermore, it is also possible to annotate variables and structure
     * members to enforce that they are only accessed when certain locks are
     * held.
     */
    
    
    /* Structure implements a lock. */
    
    /* Function acquires an exclusive or shared lock. */
    
    /* Function attempts to acquire an exclusive or shared lock. */
    
    /* Function releases a lock. */
    
    /* Function asserts that an exclusive or shared lock is held. */
    
    /* Function requires that an exclusive or shared lock is or is not held. */
    
    /* Function should not be analyzed. */
    
    /* Guard variables and structure members by lock. */
    
    _Pragma("diag_pop")
    
    /*****************************************************************************/
    /*  _TYPES.H                                                                 */
    /*                                                                           */
    /* Copyright (c) 2017 Texas Instruments Incorporated                         */
    /* http://www.ti.com/                                                        */
    /*                                                                           */
    /*  Redistribution and  use in source  and binary forms, with  or without    */
    /*  modification,  are permitted provided  that the  following conditions    */
    /*  are met:                                                                 */
    /*                                                                           */
    /*     Redistributions  of source  code must  retain the  above copyright    */
    /*     notice, this list of conditions and the following disclaimer.         */
    /*                                                                           */
    /*     Redistributions in binary form  must reproduce the above copyright    */
    /*     notice, this  list of conditions  and the following  disclaimer in    */
    /*     the  documentation  and/or   other  materials  provided  with  the    */
    /*     distribution.                                                         */
    /*                                                                           */
    /*     Neither the  name of Texas Instruments Incorporated  nor the names    */
    /*     of its  contributors may  be used to  endorse or  promote products    */
    /*     derived  from   this  software  without   specific  prior  written    */
    /*     permission.                                                           */
    /*                                                                           */
    /*  THIS SOFTWARE  IS PROVIDED BY THE COPYRIGHT  HOLDERS AND CONTRIBUTORS    */
    /*  "AS IS"  AND ANY  EXPRESS OR IMPLIED  WARRANTIES, INCLUDING,  BUT NOT    */
    /*  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR    */
    /*  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT    */
    /*  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,    */
    /*  SPECIAL,  EXEMPLARY,  OR CONSEQUENTIAL  DAMAGES  (INCLUDING, BUT  NOT    */
    /*  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,    */
    /*  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY    */
    /*  THEORY OF  LIABILITY, WHETHER IN CONTRACT, STRICT  LIABILITY, OR TORT    */
    /*  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE    */
    /*  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     */
    /*                                                                           */
    /*****************************************************************************/
    
    
    
    #pragma diag_push
    /* This file is required to use base types */
    #pragma CHECK_MISRA("-6.3")
    
    
    /*
     * Basic types upon which most other types are built.
     */
        typedef          int    __int16_t;
        typedef unsigned int   __uint16_t;
        typedef          long   __int32_t;
        typedef unsigned long  __uint32_t;
    
    
    /* LONGLONG */
    typedef	long long		__int64_t;
    
    /* LONGLONG */
    typedef	unsigned long long	__uint64_t;
    
    /*
     * Standard type definitions.
     */
    typedef	__uint32_t	__clock_t;		/* clock()... */
    typedef	__int32_t	__critical_t;
    typedef	double		__double_t;
    typedef	float		__float_t;
    typedef	__int32_t	__intfptr_t;
    typedef	__int64_t	__intmax_t;
    typedef __int32_t       __intptr_t;
    
    typedef	__int16_t	__int_fast8_t;
    typedef	__int16_t	__int_fast16_t;
    typedef	__int32_t	__int_fast32_t;
    typedef	__int64_t	__int_fast64_t;
    typedef	__int16_t	__int_least8_t;
    typedef	__int16_t	__int_least16_t;
    typedef	__int32_t	__int_least32_t;
    typedef	__int64_t	__int_least64_t;
    typedef	long __ptrdiff_t;		/* ptr1 - ptr2 */
    typedef	__int16_t	__register_t;
    typedef	__int32_t	__segsz_t;		/* segment size (in pages) */
    typedef	unsigned long	__size_t;		/* sizeof() */
    typedef	__int32_t	__ssize_t;		/* byte count or error */
    typedef __uint32_t      __time_t;
    typedef	__uint32_t	__uintfptr_t;
    typedef	__uint64_t	__uintmax_t;
    typedef	__uint32_t	__uintptr_t;
    
    typedef	__uint16_t	__uint_fast8_t;
    typedef	__uint16_t	__uint_fast16_t;
    typedef	__uint32_t	__uint_fast32_t;
    typedef	__uint64_t	__uint_fast64_t;
    typedef	__uint16_t	__uint_least8_t;
    typedef	__uint16_t	__uint_least16_t;
    typedef	__uint32_t	__uint_least32_t;
    typedef	__uint64_t	__uint_least64_t;
    typedef	__uint16_t	__u_register_t;
    typedef	__uint32_t	__vm_offset_t;
    typedef	__uint32_t	__vm_paddr_t;
    typedef	__uint32_t	__vm_size_t;
    
    typedef	unsigned int ___wchar_t;
    
    
    /*
     * POSIX target specific _off_t type definition
     */
    typedef long int _off_t;
    
    /*
     * Unusual type definitions.
     */
    typedef char* __va_list;
    
    #pragma diag_pop
    
    
    _Pragma("diag_push")
    /* This file is required to use types without size and signedness */
    _Pragma("CHECK_MISRA(\"-6.3\")")
    
    /*
     * Standard type definitions.
     */
    typedef	__int32_t	__blksize_t;	/* file block size */
    typedef	__int64_t	__blkcnt_t;	/* file block count */
    typedef	__int32_t	__clockid_t;	/* clock_gettime()... */
    typedef	__uint32_t	__fflags_t;	/* file flags */
    typedef	__uint64_t	__fsblkcnt_t;
    typedef	__uint64_t	__fsfilcnt_t;
    typedef	__uint32_t	__gid_t;
    typedef	__int64_t	__id_t;		/* can hold a gid_t, pid_t, or uid_t */
    typedef	__uint64_t	__ino_t;	/* inode number */
    typedef	long		__key_t;	/* IPC key (for Sys V IPC) */
    typedef	__int32_t	__lwpid_t;	/* Thread ID (a.k.a. LWP) */
    typedef	__uint16_t	__mode_t;	/* permissions */
    typedef	int		__accmode_t;	/* access permissions */
    typedef	int		__nl_item;
    typedef	__uint64_t	__nlink_t;	/* link count */
    typedef	_off_t	        __off_t;	/* file offset (target-specific)  */
    typedef	__int64_t	__off64_t;	/* file offset (always 64-bit)    */
    typedef	__int32_t	__pid_t;	/* process [group] */
    typedef	__int64_t	__rlim_t;	/* resource limit - intentionally */
    					/* signed, because of legacy code */
    					/* that uses -1 for RLIM_INFINITY */
    typedef	__uint16_t	__sa_family_t;
    typedef	__uint32_t	__socklen_t;
    typedef	long		__suseconds_t;	/* microseconds (signed) */
    typedef	struct __timer	*__timer_t;	/* timer_gettime()... */
    typedef	struct __mq	*__mqd_t;	/* mq_open()... */
    typedef	__uint32_t	__uid_t;
    typedef	unsigned int	__useconds_t;	/* microseconds (unsigned) */
    typedef	int		__cpuwhich_t;	/* which parameter for cpuset. */
    typedef	int		__cpulevel_t;	/* level parameter for cpuset. */
    typedef int		__cpusetid_t;	/* cpuset identifier. */
    
    /*
     * Unusual type definitions.
     */
    /*
     * rune_t is declared to be an ``int'' instead of the more natural
     * ``unsigned long'' or ``long''.  Two things are happening here.  It is not
     * unsigned so that EOF (-1) can be naturally assigned to it and used.  Also,
     * it looks like 10646 will be a 31 bit standard.  This means that if your
     * ints cannot hold 32 bits, you will be in trouble.  The reason an int was
     * chosen over a long is that the is*() and to*() routines take ints (says
     * ANSI C), but they use __ct_rune_t instead of int.
     *
     * NOTE: rune_t is not covered by ANSI nor other standards, and should not
     * be instantiated outside of lib/libc/locale.  Use wchar_t.  wint_t and
     * rune_t must be the same type.  Also, wint_t should be able to hold all
     * members of the largest character set plus one extra value (WEOF), and
     * must be at least 16 bits.
     */
    typedef	int		__ct_rune_t;	/* arg type for ctype funcs */
    
    typedef	__ct_rune_t	__rune_t;	/* rune_t (see above) */
    typedef	__ct_rune_t	__wint_t;	/* wint_t (see above) */
    
    /* Clang already provides these types as built-ins, but only in C++ mode. */
    typedef	__uint_least16_t __char16_t;
    typedef	__uint_least32_t __char32_t;
    /* In C++11, char16_t and char32_t are built-in types. */
    
    typedef struct {
    	long long __max_align1 __attribute__((aligned(__alignof__(long long))));
    	long double __max_align2 __attribute__((aligned(__alignof__(long double))));
    } __max_align_t;
    
    typedef	__uint64_t	__dev_t;	/* device number */
    
    typedef	__uint32_t	__fixpt_t;	/* fixed point number */
    
    /*
     * mbstate_t is an opaque object to keep conversion state during multibyte
     * stream conversions.
     */
    
    typedef int _Mbstatet;
    
    typedef _Mbstatet __mbstate_t;
    
    typedef __uintmax_t     __rman_res_t;
    
    /*
     * When the following macro is defined, the system uses 64-bit inode numbers.
     * Programs can use this to avoid including <sys/param.h>, with its associated
     * namespace pollution.
     */
    
    _Pragma("diag_pop")
    
    
    typedef __va_list va_list;
    
    
    
    
    /****************************************************************************/
    /* RETURN THE NEXT VALUE ON THE STACK ...                                   */
    /*                                                                          */
    /* (<advance ap>, <access the value>) BECOMES ...                           */
    /*                                                                          */
    /* ap -= 1 (stack grows toward high addresses)                              */
    /* ap -= 1 more if type is long or float                                    */
    /* ap -= 1 more if type is long or float and to account for alignment       */
    /*       if necessary                                                       */
    /*                                                                          */
    /* if      (<type is passed by address [struct or union]>) return **ap;     */
    /* else if (<type is integer size>)                        return *ap;      */
    /*                                                                          */
    /* LONG/FLOATS ARE ALWAYS ALIGNED ON AN EVEN WORD BOUNDARY, EVEN WHEN       */
    /* PASSED AS PARAMETERS, THUS ap MUST BE ALIGNED FOR THOSE ACCESSES.        */
    /****************************************************************************/
    
    #pragma diag_pop
    
    
    
    _Pragma("diag_push")
    _Pragma("CHECK_MISRA(\"-20.2\")") /* reuse of standard macros/objects/funcs */
    _Pragma("CHECK_MISRA(\"-20.1\")") /* redefining reserved identifiers */
    _Pragma("CHECK_MISRA(\"-19.7\")") /* use function instead of function-like macro */
    _Pragma("CHECK_MISRA(\"-19.4\")") /* macros should have only simple expansions */
    _Pragma("CHECK_MISRA(\"-19.1\")") /* include should follow directive or comment */
    _Pragma("CHECK_MISRA(\"-16.3\")") /* parameters without names */
    _Pragma("CHECK_MISRA(\"-6.3\")")  /* use size/sign-specific typedefs */
    
    /*---------------------------------------------------------------------------*/
    /* Attributes are only available in relaxed ANSI mode.                       */
    /*---------------------------------------------------------------------------*/
    
    
    /****************************************************************************/
    /* TYPES THAT ANSI REQUIRES TO BE DEFINED                                   */
    /****************************************************************************/
    typedef unsigned long size_t;
    
    struct __sFILE {
          int fd;                    /* File descriptor */
          unsigned char* buf;        /* Pointer to start of buffer */
          unsigned char* pos;        /* Position in buffer */
          unsigned char* bufend;     /* Pointer to end of buffer */
          unsigned char* buff_stop;  /* Pointer to last read char in buffer */
          unsigned int   flags;      /* File status flags (see below) */
    };
    
    typedef struct __sFILE FILE;
    
    typedef long fpos_t;
    
    /* For C6x, long type can be 40-bits, so we use int to get 32-bit off_t. */
    typedef long off_t;
    
    /****************************************************************************/
    /* DEVICE AND STREAM RELATED MACROS                                         */
    /****************************************************************************/
    /****************************************************************************/
    /* MACROS THAT DEFINE AND USE FILE STATUS FLAGS                             */
    /****************************************************************************/
    
    
    
    /****************************************************************************/
    /* MACROS THAT ANSI REQUIRES TO BE DEFINED                                  */
    /****************************************************************************/
    
    
    
    
    
    
    
    
    /******** END OF ANSI MACROS ************************************************/
    
    
    /****************************************************************************/
    /* DEVICE AND STREAM RELATED DATA STRUCTURES AND MACROS                     */
    /****************************************************************************/
    
    extern  FILE _ftable[10];
    extern  char __TI_tmpnams[10][16];
    
    /****************************************************************************/
    /*   FUNCTION DEFINITIONS  - ANSI                                           */
    /****************************************************************************/
    /****************************************************************************/
    /* OPERATIONS ON FILES                                                      */
    /****************************************************************************/
    extern  int     remove(const char *_file);
    extern  int     rename(const char *_old, const char *_new);
    extern  FILE   *tmpfile(void);
    extern  char   *tmpnam(char *_s);
    
    /****************************************************************************/
    /* FILE ACCESS FUNCTIONS                                                    */
    /****************************************************************************/
    extern  int     fclose(FILE * __restrict _fp);
    extern  FILE   *fopen(const char * __restrict _fname,
                                      const char * __restrict _mode);
    extern  FILE   *freopen(const char * __restrict _fname,
                                        const char * __restrict _mode,
    			            FILE * __restrict _fp);
    extern  void    setbuf(FILE * __restrict _fp,
                                       char * __restrict _buf);
    extern  int     setvbuf(FILE * __restrict _fp,
                                        char * __restrict _buf,
    			            int _type, size_t _size);
    extern  int     fflush(FILE *_fp);
    
    /****************************************************************************/
    /* FORMATTED INPUT/OUTPUT FUNCTIONS                                         */
    /****************************************************************************/
    extern  int fprintf(FILE * __restrict _fp,
                                    const char * __restrict _format, ...)
                   __attribute__((__format__ (__printf__, 2, 3)));
    extern  int fscanf(FILE * __restrict _fp,
                                   const char * __restrict _fmt, ...)
                   __attribute__((__format__ (__scanf__, 2, 3)));
    extern  int printf(const char * __restrict _format, ...)
                   __attribute__((__format__ (__printf__, 1, 2)));
    extern  int scanf(const char * __restrict _fmt, ...)
                   __attribute__((__format__ (__scanf__, 1, 2)));
    extern  int sprintf(char * __restrict _string,
                                    const char * __restrict _format, ...)
                   __attribute__((__format__ (__printf__, 2, 3)));
    extern  int snprintf(char * __restrict _string, size_t _n,
    				 const char * __restrict _format, ...)
                   __attribute__((__format__ (__printf__, 3, 4)));
    extern  int sscanf(const char * __restrict _str,
                                   const char * __restrict _fmt, ...)
                   __attribute__((__format__ (__scanf__, 2, 3)));
    extern  int vfprintf(FILE * __restrict _fp,
                                     const char * __restrict _format, va_list _ap)
                   __attribute__((__format__ (__printf__, 2, 0)));
    extern  int vfscanf(FILE * __restrict _fp,
                                    const char * __restrict _fmt, va_list _ap)
                   __attribute__((__format__ (__scanf__, 2, 0)));
    extern  int vprintf(const char * __restrict _format, va_list _ap)
                   __attribute__((__format__ (__printf__, 1, 0)));
    extern  int vscanf(const char * __restrict _format, va_list _ap)
                   __attribute__((__format__ (__scanf__, 1, 0)));
    extern  int vsprintf(char * __restrict _string,
                                     const char * __restrict _format, va_list _ap)
                   __attribute__((__format__ (__printf__, 2, 0)));
    extern  int vsnprintf(char * __restrict _string, size_t _n,
    				  const char * __restrict _format, va_list _ap)
                   __attribute__((__format__ (__printf__, 3, 0)));
    extern  int vsscanf(const char * __restrict _str,
                                    const char * __restrict _fmt, va_list _ap)
                   __attribute__((__format__ (__scanf__, 2, 0)));
    extern  int	asprintf(char **, const char *, ...)
                   __attribute__((__format__ (__printf__, 2, 3)));
    extern  int	vasprintf(char **, const char *, va_list)
                   __attribute__((__format__ (__printf__, 2, 0)));
    
    /****************************************************************************/
    /* CHARACTER INPUT/OUTPUT FUNCTIONS                                         */
    /****************************************************************************/
    extern  int     fgetc(FILE *_fp);
    extern  char   *fgets(char * __restrict _ptr, int _size,
    				  FILE * __restrict _fp);
    extern  int     fputc(int _c, FILE *_fp);
    extern  int     fputs(const char * __restrict _ptr,
                                      FILE * __restrict _fp);
    extern  int     getc(FILE *_p);
    extern  int     getchar(void);
    extern  char   *gets(char *_ptr);
    extern  int     putc(int _x, FILE *_fp);
    extern  int     putchar(int _x);
    extern  int     puts(const char *_ptr);
    extern  int     ungetc(int _c, FILE *_fp);
    
    /****************************************************************************/
    /* DIRECT INPUT/OUTPUT FUNCTIONS                                            */
    /****************************************************************************/
    extern  size_t  fread(void * __restrict _ptr,
                                      size_t _size, size_t _count,
    				  FILE * __restrict _fp);
    extern  size_t  fwrite(const void * __restrict _ptr,
                                       size_t _size, size_t _count,
                                       FILE * __restrict _fp);
    
    /****************************************************************************/
    /* FILE POSITIONING FUNCTIONS                                               */
    /****************************************************************************/
    extern  int     fgetpos(FILE * __restrict _fp,
                                        fpos_t * __restrict _pos);
    extern  int     fseek(FILE *_fp, long _offset,
    				  int _ptrname);
    extern  int     fseeko(FILE *_fp, off_t _offset,
                                       int _ptrname);
    extern  int     fsetpos(FILE * __restrict _fp,
                                        const fpos_t * __restrict _pos);
    extern  long    ftell(FILE *_fp);
    extern  off_t   ftello(FILE *_fp);
    extern  void    rewind(FILE *_fp);
    
    /****************************************************************************/
    /* ERROR-HANDLING FUNCTIONS                                                 */
    /****************************************************************************/
    extern  void    clearerr(FILE *_fp);
    extern  int     feof(FILE *_fp);
    extern  int     ferror(FILE *_fp);
    extern  void    perror(const char *_s);
    
    
    
    
    
    
    /*----------------------------------------------------------------------------*/
    /* If sys/cdefs.h is available, go ahead and include it. xlocale.h assumes    */
    /* this file will have already included sys/cdefs.h.                          */
    /*----------------------------------------------------------------------------*/
    
    /*----------------------------------------------------------------------------*/
    /* If sys/_types.h is available, include it. xlocale.h assumes this file will */
    /* have already provided a definition of __va_list.                           */
    /*----------------------------------------------------------------------------*/
    
    /*----------------------------------------------------------------------------*/
    /* Include xlocale/_stdio.h if xlocale.h has already been included. This is   */
    /* to conform with FreeBSD's xlocale implementation.                          */
    /*----------------------------------------------------------------------------*/
    
    _Pragma("diag_pop")
    
    /*****************************************************************************/
    /* assert.h                                                                  */
    /*                                                                           */
    /* Copyright (c) 1993 Texas Instruments Incorporated                         */
    /* http://www.ti.com/                                                        */
    /*                                                                           */
    /*  Redistribution and  use in source  and binary forms, with  or without    */
    /*  modification,  are permitted provided  that the  following conditions    */
    /*  are met:                                                                 */
    /*                                                                           */
    /*     Redistributions  of source  code must  retain the  above copyright    */
    /*     notice, this list of conditions and the following disclaimer.         */
    /*                                                                           */
    /*     Redistributions in binary form  must reproduce the above copyright    */
    /*     notice, this  list of conditions  and the following  disclaimer in    */
    /*     the  documentation  and/or   other  materials  provided  with  the    */
    /*     distribution.                                                         */
    /*                                                                           */
    /*     Neither the  name of Texas Instruments Incorporated  nor the names    */
    /*     of its  contributors may  be used to  endorse or  promote products    */
    /*     derived  from   this  software  without   specific  prior  written    */
    /*     permission.                                                           */
    /*                                                                           */
    /*  THIS SOFTWARE  IS PROVIDED BY THE COPYRIGHT  HOLDERS AND CONTRIBUTORS    */
    /*  "AS IS"  AND ANY  EXPRESS OR IMPLIED  WARRANTIES, INCLUDING,  BUT NOT    */
    /*  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR    */
    /*  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT    */
    /*  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,    */
    /*  SPECIAL,  EXEMPLARY,  OR CONSEQUENTIAL  DAMAGES  (INCLUDING, BUT  NOT    */
    /*  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,    */
    /*  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY    */
    /*  THEORY OF  LIABILITY, WHETHER IN CONTRACT, STRICT  LIABILITY, OR TORT    */
    /*  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE    */
    /*  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.     */
    /*                                                                           */
    /*****************************************************************************/
    
    
    
    
    _Pragma("diag_push")
    _Pragma("CHECK_MISRA(\"-6.3\")") /* standard types required for standard headers */
    _Pragma("CHECK_MISRA(\"-19.4\")") /* macros required for implementation */
    _Pragma("CHECK_MISRA(\"-19.7\")") /* macros required for implementation */
    _Pragma("CHECK_MISRA(\"-19.13\")") /* # and ## required for implementation */
    
    
    
    extern  void _abort_msg(const char *msg);
    
    
    
    
    _Pragma("diag_pop")
    
    
    
    
    /**
     * hello.c
     */
    
    typedef char __assert_0[(2 + 2 * 2 == 5) ? 1 : -1] __attribute__((__unused__));
    
    int main(void)
    {
    	printf("Hello World!\n");
    	return 0;
    }
    
    **** Build of configuration Debug for project TestErrorCompiler2 ****
    
    "C:\\ti\\ccs1270\\ccs\\utils\\bin\\gmake" -k -j 12 hello.obj -O 
     
    Building file: "../hello.c"
    Invoking: C2000 Compiler
    "C:/ti/ccs1270/ccs/tools/compiler/ti-cgt-c2000_22.6.1.LTS/bin/cl2000" -v28 -ml -mt --cla_support=cla1 --float_support=fpu32 --tmu_support=tmu0 --vcu_support=vcu2 --include_path="C:/Users/ngeorger/workspace/TestErrorCompiler2" --include_path="C:/ti/ccs1270/ccs/tools/compiler/ti-cgt-c2000_22.6.1.LTS/include" -g --printf_support=minimal --preproc_with_comment --preproc_with_compile --diag_warning=225 --diag_wrap=off --display_error_number --abi=coffabi  "../hello.c"
     
    >> Compilation failure
    subdir_rules.mk:9: recipe for target 'hello.obj' failed
    "../hello.c", line 9: error #95: the size of an array must be greater than zero
    1 error detected in the compilation of "../hello.c".
    gmake: *** [hello.obj] Error 1
    
    **** Build Finished ****
    

  • Thank you for the test case.  

    But static_assert supports error messages since C11

    That is correct.  By default, the C28x compiler supports C89.  If you want C11 support, add the option --c11.  Under --c11, the diagnostic emitted is ...

    "hello.c", line 9: error #1847: static assertion failed with "ERROR"

    For further detail, please search the C28x compiler manual for the sub-chapter titled Changing the ANSI/ISO C/C++ Language Mode.

    Thanks and regards,

    -George