xref: /freebsd-src/contrib/llvm-project/clang/include/clang-c/ExternC.h (revision 5b27928474e6a4103d65b347544705c40c9618fd)
1*480093f4SDimitry Andric /*===- clang-c/ExternC.h - Wrapper for 'extern "C"' ---------------*- C -*-===*\
2*480093f4SDimitry Andric |*                                                                            *|
3*480093f4SDimitry Andric |* Part of the LLVM Project, under the Apache License v2.0 with LLVM          *|
4*480093f4SDimitry Andric |* Exceptions.                                                                *|
5*480093f4SDimitry Andric |* See https://llvm.org/LICENSE.txt for license information.                  *|
6*480093f4SDimitry Andric |* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception                    *|
7*480093f4SDimitry Andric |*                                                                            *|
8*480093f4SDimitry Andric |*===----------------------------------------------------------------------===*|
9*480093f4SDimitry Andric |*                                                                            *|
10*480093f4SDimitry Andric |* This file defines an 'extern "C"' wrapper.                                 *|
11*480093f4SDimitry Andric |*                                                                            *|
12*480093f4SDimitry Andric \*===----------------------------------------------------------------------===*/
13*480093f4SDimitry Andric 
14*480093f4SDimitry Andric #ifndef LLVM_CLANG_C_EXTERN_C_H
15*480093f4SDimitry Andric #define LLVM_CLANG_C_EXTERN_C_H
16*480093f4SDimitry Andric 
17*480093f4SDimitry Andric #ifdef __clang__
18*480093f4SDimitry Andric #define LLVM_CLANG_C_STRICT_PROTOTYPES_BEGIN                                   \
19*480093f4SDimitry Andric   _Pragma("clang diagnostic push")                                             \
20*480093f4SDimitry Andric       _Pragma("clang diagnostic error \"-Wstrict-prototypes\"")
21*480093f4SDimitry Andric #define LLVM_CLANG_C_STRICT_PROTOTYPES_END _Pragma("clang diagnostic pop")
22*480093f4SDimitry Andric #else
23*480093f4SDimitry Andric #define LLVM_CLANG_C_STRICT_PROTOTYPES_BEGIN
24*480093f4SDimitry Andric #define LLVM_CLANG_C_STRICT_PROTOTYPES_END
25*480093f4SDimitry Andric #endif
26*480093f4SDimitry Andric 
27*480093f4SDimitry Andric #ifdef __cplusplus
28*480093f4SDimitry Andric #define LLVM_CLANG_C_EXTERN_C_BEGIN                                            \
29*480093f4SDimitry Andric   extern "C" {                                                                 \
30*480093f4SDimitry Andric   LLVM_CLANG_C_STRICT_PROTOTYPES_BEGIN
31*480093f4SDimitry Andric #define LLVM_CLANG_C_EXTERN_C_END                                              \
32*480093f4SDimitry Andric   LLVM_CLANG_C_STRICT_PROTOTYPES_END                                           \
33*480093f4SDimitry Andric   }
34*480093f4SDimitry Andric #else
35*480093f4SDimitry Andric #define LLVM_CLANG_C_EXTERN_C_BEGIN LLVM_CLANG_C_STRICT_PROTOTYPES_BEGIN
36*480093f4SDimitry Andric #define LLVM_CLANG_C_EXTERN_C_END LLVM_CLANG_C_STRICT_PROTOTYPES_END
37*480093f4SDimitry Andric #endif
38*480093f4SDimitry Andric 
39*480093f4SDimitry Andric #endif
40