196fdab6eSRichard Smith // RUN: rm -rf %t 296fdab6eSRichard Smith // RUN: mkdir %t 396fdab6eSRichard Smith // RUN: echo 'module tmp { header "tmp.h" }' > %t/map 496fdab6eSRichard Smith // RUN: touch %t/tmp.h 596fdab6eSRichard Smith // RUN: %clang_cc1 -fmodules -DFOO=1 -x c++ -fmodule-name=tmp %t/map -emit-module -o %t/tmp.pcm 696fdab6eSRichard Smith 796fdab6eSRichard Smith // Can use the module. 896fdab6eSRichard Smith // RUN: %clang_cc1 -fmodules -DFOO=1 -x c++ -fmodule-map-file=%t/map -fmodule-file=%t/tmp.pcm -verify -I%t %s 996fdab6eSRichard Smith 10a1ddf5e7SRichard Smith // Can use the module if an input file is newer. (This happens on remote file systems.) 1196fdab6eSRichard Smith // RUN: sleep 1 1296fdab6eSRichard Smith // RUN: touch %t/tmp.h 1396fdab6eSRichard Smith // RUN: %clang_cc1 -fmodules -DFOO=1 -x c++ -fmodule-map-file=%t/map -fmodule-file=%t/tmp.pcm -verify -I%t %s 1496fdab6eSRichard Smith 1596fdab6eSRichard Smith // Can use the module if -D flags change. 1696261ddfSRichard Smith // RUN: %clang_cc1 -fmodules -DFOO=2 -DBAR=1 -x c++ -fmodule-map-file=%t/map -fmodule-file=%t/tmp.pcm -verify -I%t %s 1796261ddfSRichard Smith // RUN: %clang_cc1 -fmodules -DBAR=2 -x c++ -fmodule-map-file=%t/map -fmodule-file=%t/tmp.pcm -verify -I%t %s 1896fdab6eSRichard Smith 1996fdab6eSRichard Smith // Can use the module if -W flags change. 2096261ddfSRichard Smith // RUN: %clang_cc1 -fmodules -DBAR=2 -Wextra -x c++ -fmodule-map-file=%t/map -fmodule-file=%t/tmp.pcm -verify -I%t %s 2196fdab6eSRichard Smith 2296fdab6eSRichard Smith // Can use the module if -I flags change. 2396261ddfSRichard Smith // RUN: %clang_cc1 -fmodules -DBAR=2 -I. -x c++ -fmodule-map-file=%t/map -fmodule-file=%t/tmp.pcm -verify -I%t %s 2496fdab6eSRichard Smith 25a1ddf5e7SRichard Smith // Can use the module if -fPIC/-fPIE flags change. 26a1ddf5e7SRichard Smith // RUN: %clang_cc1 -fmodules -DBAR=2 -pic-level 2 -x c++ -fmodule-map-file=%t/map -fmodule-file=%t/tmp.pcm -verify -I%t %s 27*c9d336e5SRafael Espindola // RUN: %clang_cc1 -fmodules -DBAR=2 -pic-level 1 -pic-is-pie -x c++ -fmodule-map-file=%t/map -fmodule-file=%t/tmp.pcm -verify -I%t %s 28a1ddf5e7SRichard Smith 29a1ddf5e7SRichard Smith // Can use the module if -static flag changes. 30a1ddf5e7SRichard Smith // RUN: %clang_cc1 -fmodules -DBAR=2 -static-define -x c++ -fmodule-map-file=%t/map -fmodule-file=%t/tmp.pcm -verify -I%t %s 31a1ddf5e7SRichard Smith 32a1ddf5e7SRichard Smith // Can use the module if -fsanitize= flags change. 33a1ddf5e7SRichard Smith // RUN: %clang_cc1 -fmodules -DBAR=2 -fsanitize=address -x c++ -fmodule-map-file=%t/map -fmodule-file=%t/tmp.pcm -verify -I%t %s 34a1ddf5e7SRichard Smith // 35a1ddf5e7SRichard Smith // RUN: %clang_cc1 -fmodules -DFOO=1 -fsanitize=address -x c++ -fmodule-name=tmp %t/map -emit-module -o %t/tmp-san.pcm 36a1ddf5e7SRichard Smith // RUN: %clang_cc1 -fmodules -DBAR=2 -x c++ -fmodule-map-file=%t/map -fmodule-file=%t/tmp-san.pcm -verify -I%t %s 37a1ddf5e7SRichard Smith 38351241c8SRichard Smith // -fno-assume-sane-operator-new is implied by the driver -fsanitize=address flag. 39351241c8SRichard Smith // RUN: %clang_cc1 -fmodules -DBAR=2 -fno-assume-sane-operator-new -x c++ -fmodule-map-file=%t/map -fmodule-file=%t/tmp.pcm -verify -I%t %s 40351241c8SRichard Smith 411e2cf0ddSRichard Smith // Can use the module if -O flags change. 421e2cf0ddSRichard Smith // RUN: %clang_cc1 -fmodules -DBAR=2 -Os -x c++ -fmodule-map-file=%t/map -fmodule-file=%t/tmp.pcm -verify -I%t %s 431e2cf0ddSRichard Smith // 441e2cf0ddSRichard Smith // RUN: %clang_cc1 -fmodules -DFOO=1 -O2 -x c++ -fmodule-name=tmp %t/map -emit-module -o %t/tmp-O2.pcm 451e2cf0ddSRichard Smith // RUN: %clang_cc1 -fmodules -DBAR=2 -O0 -x c++ -fmodule-map-file=%t/map -fmodule-file=%t/tmp-O2.pcm -verify -I%t %s 461e2cf0ddSRichard Smith // RUN: %clang_cc1 -fmodules -DBAR=2 -Os -x c++ -fmodule-map-file=%t/map -fmodule-file=%t/tmp-O2.pcm -verify -I%t %s 471e2cf0ddSRichard Smith 4896fdab6eSRichard Smith #include "tmp.h" // expected-no-diagnostics 4996261ddfSRichard Smith 5096261ddfSRichard Smith #ifndef BAR 5196261ddfSRichard Smith #if FOO != 1 5296261ddfSRichard Smith #error bad FOO from command line and module 5396261ddfSRichard Smith #endif 5496261ddfSRichard Smith #elif BAR == 1 5596261ddfSRichard Smith #if FOO != 2 5696261ddfSRichard Smith #error bad FOO from command line overriding module 5796261ddfSRichard Smith #endif 5896261ddfSRichard Smith #elif BAR == 2 5996261ddfSRichard Smith #ifdef FOO 6096261ddfSRichard Smith #error FOO leaked from module 6196261ddfSRichard Smith #endif 6296261ddfSRichard Smith #else 6396261ddfSRichard Smith #error bad BAR 6496261ddfSRichard Smith #endif 65