blob: 6ced215a06d1b7d701dee83b749e11bab037fc90 [file] [log] [blame]
Stephen Hines176edba2014-12-01 14:53:08 -08001// RUN: rm -rf %t
2// RUN: mkdir %t
3// RUN: echo 'module tmp { header "tmp.h" }' > %t/map
4// RUN: touch %t/tmp.h
5// RUN: %clang_cc1 -fmodules -DFOO=1 -x c++ -fmodule-name=tmp %t/map -emit-module -o %t/tmp.pcm
6
7// Can use the module.
8// RUN: %clang_cc1 -fmodules -DFOO=1 -x c++ -fmodule-map-file=%t/map -fmodule-file=%t/tmp.pcm -verify -I%t %s
9
10// Can use the module if an input file is newer. (This happens on
11// remote file systems.)
12// RUN: sleep 1
13// RUN: touch %t/tmp.h
14// RUN: %clang_cc1 -fmodules -DFOO=1 -x c++ -fmodule-map-file=%t/map -fmodule-file=%t/tmp.pcm -verify -I%t %s
15
16// Can use the module if -D flags change.
17// RUN: %clang_cc1 -fmodules -DFOO=2 -DBAR=1 -x c++ -fmodule-map-file=%t/map -fmodule-file=%t/tmp.pcm -verify -I%t %s
18// RUN: %clang_cc1 -fmodules -DBAR=2 -x c++ -fmodule-map-file=%t/map -fmodule-file=%t/tmp.pcm -verify -I%t %s
19
20// Can use the module if -W flags change.
21// RUN: %clang_cc1 -fmodules -DBAR=2 -Wextra -x c++ -fmodule-map-file=%t/map -fmodule-file=%t/tmp.pcm -verify -I%t %s
22
23// Can use the module if -I flags change.
24// RUN: %clang_cc1 -fmodules -DBAR=2 -I. -x c++ -fmodule-map-file=%t/map -fmodule-file=%t/tmp.pcm -verify -I%t %s
25
26// Can use the module if -O flags change.
27// RUN: %clang_cc1 -fmodules -DBAR=2 -Os -x c++ -fmodule-map-file=%t/map -fmodule-file=%t/tmp.pcm -verify -I%t %s
28//
29// RUN: %clang_cc1 -fmodules -DFOO=1 -O2 -x c++ -fmodule-name=tmp %t/map -emit-module -o %t/tmp-O2.pcm
30// RUN: %clang_cc1 -fmodules -DBAR=2 -O0 -x c++ -fmodule-map-file=%t/map -fmodule-file=%t/tmp-O2.pcm -verify -I%t %s
31// RUN: %clang_cc1 -fmodules -DBAR=2 -Os -x c++ -fmodule-map-file=%t/map -fmodule-file=%t/tmp-O2.pcm -verify -I%t %s
32
33#include "tmp.h" // expected-no-diagnostics
34
35#ifndef BAR
36#if FOO != 1
37#error bad FOO from command line and module
38#endif
39#elif BAR == 1
40#if FOO != 2
41#error bad FOO from command line overriding module
42#endif
43#elif BAR == 2
44#ifdef FOO
45#error FOO leaked from module
46#endif
47#else
48#error bad BAR
49#endif