Clang Project

clang_source_code/test/Modules/merge-target-features.cpp
1// RUN: rm -rf %t
2// RUN: cd %S
3// REQUIRES: x86-registered-target
4// RUN: %clang_cc1 -fmodules -x c++ -fmodules-cache-path=%t \
5// RUN:   -iquote Inputs/merge-target-features \
6// RUN:   -fno-implicit-modules \
7// RUN:   -fmodule-map-file-home-is-cwd \
8// RUN:   -emit-module -fmodule-name=foo -o %t/foo.pcm \
9// RUN:   -triple i386-unknown-unknown \
10// RUN:   -target-cpu i386 -target-feature +sse2 \
11// RUN:   Inputs/merge-target-features/module.modulemap
12//
13// RUN: not %clang_cc1 -fmodules -x c++ -fmodules-cache-path=%t \
14// RUN:   -iquote Inputs/merge-target-features \
15// RUN:   -fno-implicit-modules \
16// RUN:   -fmodule-map-file-home-is-cwd \
17// RUN:   -fmodule-map-file=Inputs/merge-target-features/module.modulemap \
18// RUN:   -fmodule-file=%t/foo.pcm \
19// RUN:   -triple i386-unknown-unknown \
20// RUN:   -target-cpu i386 \
21// RUN:   -fsyntax-only merge-target-features.cpp 2>&1 \
22// RUN:   | FileCheck --check-prefix=SUBSET --implicit-check-not=error: %s
23// SUBSET: error: AST file was compiled with the target feature '+sse2' but the current translation unit is not
24// SUBSET: error: {{.*}} configuration mismatch
25//
26// RUN: %clang_cc1 -fmodules -x c++ -fmodules-cache-path=%t \
27// RUN:   -iquote Inputs/merge-target-features \
28// RUN:   -fno-implicit-modules \
29// RUN:   -fmodule-map-file-home-is-cwd \
30// RUN:   -fmodule-map-file=Inputs/merge-target-features/module.modulemap \
31// RUN:   -fmodule-file=%t/foo.pcm \
32// RUN:   -triple i386-unknown-unknown \
33// RUN:   -target-cpu i386 -target-feature +sse2 \
34// RUN:   -fsyntax-only merge-target-features.cpp 2>&1 \
35// RUN:   | FileCheck --allow-empty --check-prefix=SAME %s
36// SAME-NOT: error:
37//
38// RUN: %clang_cc1 -fmodules -x c++ -fmodules-cache-path=%t \
39// RUN:   -iquote Inputs/merge-target-features \
40// RUN:   -fno-implicit-modules \
41// RUN:   -fmodule-map-file-home-is-cwd \
42// RUN:   -fmodule-map-file=Inputs/merge-target-features/module.modulemap \
43// RUN:   -fmodule-file=%t/foo.pcm \
44// RUN:   -triple i386-unknown-unknown \
45// RUN:   -target-cpu i386 -target-feature +sse2 -target-feature +sse3 \
46// RUN:   -fsyntax-only merge-target-features.cpp 2>&1 \
47// RUN:   | FileCheck --allow-empty --check-prefix=SUPERSET %s
48// SUPERSET-NOT: error:
49//
50// RUN: not %clang_cc1 -fmodules -x c++ -fmodules-cache-path=%t \
51// RUN:   -iquote Inputs/merge-target-features \
52// RUN:   -fno-implicit-modules \
53// RUN:   -fmodule-map-file-home-is-cwd \
54// RUN:   -fmodule-map-file=Inputs/merge-target-features/module.modulemap \
55// RUN:   -fmodule-file=%t/foo.pcm \
56// RUN:   -triple i386-unknown-unknown \
57// RUN:   -target-cpu i386 -target-feature +cx16 \
58// RUN:   -fsyntax-only merge-target-features.cpp 2>&1 \
59// RUN:   | FileCheck --check-prefix=MISMATCH --implicit-check-not=error: %s
60// MISMATCH: error: AST file was compiled with the target feature '+sse2' but the current translation unit is not
61// MISMATCH: error: current translation unit is compiled with the target feature '+cx16' but the AST file was not
62// MISMATCH: error: {{.*}} configuration mismatch
63
64#include "foo.h"
65
66int test(int x) {
67  return foo(x);
68}
69