xref: /llvm-project/clang/test/Modules/inline-builtins.cppm (revision e167f753bd4679329ebcf0232f72be9c63d9b671)
1*e167f753SChuanqi Xu// REQUIRES: !system-windows
2*e167f753SChuanqi Xu//
3*e167f753SChuanqi Xu// RUN: rm -rf %t
4*e167f753SChuanqi Xu// RUN: split-file %s %t
5*e167f753SChuanqi Xu// RUN: cd %t
6*e167f753SChuanqi Xu//
7*e167f753SChuanqi Xu// RUN: %clang_cc1 -std=c++20 -O3 %t/a.cppm -emit-module-interface -o %t/a.pcm
8*e167f753SChuanqi Xu// RUN: %clang_cc1 -std=c++20 -O3 %t/test.cc -fmodule-file=a=%t/a.pcm \
9*e167f753SChuanqi Xu// RUN:   -emit-llvm -o - | FileCheck %t/test.cc
10*e167f753SChuanqi Xu
11*e167f753SChuanqi Xu//--- memmove.h
12*e167f753SChuanqi Xutypedef long unsigned int size_t;
13*e167f753SChuanqi Xuextern "C" void *memmove (void *__dest, const void *__src, size_t __n)
14*e167f753SChuanqi Xu     throw () __attribute__ ((__nonnull__ (1, 2)));
15*e167f753SChuanqi Xuextern "C" __inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) void *
16*e167f753SChuanqi Xu memmove (void *__dest, const void *__src, size_t __len) throw ()
17*e167f753SChuanqi Xu{
18*e167f753SChuanqi Xu  return __builtin_memmove(__dest, __src, __len);
19*e167f753SChuanqi Xu}
20*e167f753SChuanqi Xu
21*e167f753SChuanqi Xu//--- a.cppm
22*e167f753SChuanqi Xumodule;
23*e167f753SChuanqi Xu#include "memmove.h"
24*e167f753SChuanqi Xuexport module a;
25*e167f753SChuanqi Xuexport using ::memmove;
26*e167f753SChuanqi Xu
27*e167f753SChuanqi Xu//--- test.cc
28*e167f753SChuanqi Xuimport a;
29*e167f753SChuanqi Xu
30*e167f753SChuanqi Xuvoid test() {
31*e167f753SChuanqi Xu  int a, b;
32*e167f753SChuanqi Xu  unsigned c = 0;
33*e167f753SChuanqi Xu  memmove(&a, &b, c);
34*e167f753SChuanqi Xu}
35*e167f753SChuanqi Xu
36*e167f753SChuanqi Xu// CHECK-NOT: memmove
37