xref: /freebsd-src/contrib/llvm-project/llvm/include/llvm-c/ExternC.h (revision fe6060f10f634930ff71b7c50291ddc610da2475)
1480093f4SDimitry Andric /*===- llvm-c/ExternC.h - Wrapper for 'extern "C"' ----------------*- C -*-===*\
2480093f4SDimitry Andric |*                                                                            *|
3480093f4SDimitry Andric |* Part of the LLVM Project, under the Apache License v2.0 with LLVM          *|
4480093f4SDimitry Andric |* Exceptions.                                                                *|
5480093f4SDimitry Andric |* See https://llvm.org/LICENSE.txt for license information.                  *|
6480093f4SDimitry Andric |* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception                    *|
7480093f4SDimitry Andric |*                                                                            *|
8480093f4SDimitry Andric |*===----------------------------------------------------------------------===*|
9480093f4SDimitry Andric |*                                                                            *|
10480093f4SDimitry Andric |* This file defines an 'extern "C"' wrapper                                  *|
11480093f4SDimitry Andric |*                                                                            *|
12480093f4SDimitry Andric \*===----------------------------------------------------------------------===*/
13480093f4SDimitry Andric 
14*fe6060f1SDimitry Andric #ifndef LLVM_C_EXTERNC_H
15*fe6060f1SDimitry Andric #define LLVM_C_EXTERNC_H
16480093f4SDimitry Andric 
17480093f4SDimitry Andric #ifdef __clang__
18480093f4SDimitry Andric #define LLVM_C_STRICT_PROTOTYPES_BEGIN                                         \
19480093f4SDimitry Andric   _Pragma("clang diagnostic push")                                             \
20480093f4SDimitry Andric       _Pragma("clang diagnostic error \"-Wstrict-prototypes\"")
21480093f4SDimitry Andric #define LLVM_C_STRICT_PROTOTYPES_END _Pragma("clang diagnostic pop")
22480093f4SDimitry Andric #else
23480093f4SDimitry Andric #define LLVM_C_STRICT_PROTOTYPES_BEGIN
24480093f4SDimitry Andric #define LLVM_C_STRICT_PROTOTYPES_END
25480093f4SDimitry Andric #endif
26480093f4SDimitry Andric 
27480093f4SDimitry Andric #ifdef __cplusplus
28480093f4SDimitry Andric #define LLVM_C_EXTERN_C_BEGIN                                                  \
29480093f4SDimitry Andric   extern "C" {                                                                 \
30480093f4SDimitry Andric   LLVM_C_STRICT_PROTOTYPES_BEGIN
31480093f4SDimitry Andric #define LLVM_C_EXTERN_C_END                                                    \
32480093f4SDimitry Andric   LLVM_C_STRICT_PROTOTYPES_END                                                 \
33480093f4SDimitry Andric   }
34480093f4SDimitry Andric #else
35480093f4SDimitry Andric #define LLVM_C_EXTERN_C_BEGIN LLVM_C_STRICT_PROTOTYPES_BEGIN
36480093f4SDimitry Andric #define LLVM_C_EXTERN_C_END LLVM_C_STRICT_PROTOTYPES_END
37480093f4SDimitry Andric #endif
38480093f4SDimitry Andric 
39480093f4SDimitry Andric #endif
40