//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

// We're building as C, so this test doesn't work when building with modules.
// UNSUPPORTED: modules-build

// GCC complains about unrecognized arguments because we're compiling the
// file as C, but we're passing C++ flags on the command-line.
// UNSUPPORTED: gcc

// Test that the C wrapper headers can be included when compiling them as C.

// NOTE: It's not common or recommended to have libc++ in the header search
// path when compiling C files, but it does happen often enough.

// RUN: %{cxx} -c -xc %s -fsyntax-only %{flags} %{compile_flags} -std=c99

#include <__config>

#include <complex.h>
#include <ctype.h>
#include <errno.h>
#include <fenv.h>
#include <float.h>
#include <inttypes.h>
#include <limits.h>
#ifndef _LIBCPP_HAS_NO_LOCALIZATION
#   include <locale.h>
#endif
#include <math.h>
#include <setjmp.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// The clang-shipped tgmath.h header doesn't work with MSVC/UCRT's complex
// headers in C mode, see PR46207.
#ifndef _MSC_VER
#    include <tgmath.h>
#endif
#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS
#   include <wchar.h>
#   include <wctype.h>
#endif

int main(int argc, char **argv) {
  (void)argc;
  (void)argv;
  return 0;
}
