blob: ea9e4f549f0d6615ab35e81a745d78271c447599 [file] [log] [blame]
Pirama Arumuga Nainar3ea9e332015-04-08 08:57:32 -07001// RUN: rm -rf %t
2// RUN: cd %S
3//
4// RUN: %clang_cc1 -fmodules -x c++ -fmodules-cache-path=%t \
5// RUN: -v \
6// RUN: -iquote Inputs/macro-ambiguity/a/quote \
7// RUN: -isystem Inputs/macro-ambiguity/a/system \
8// RUN: -fno-implicit-modules -fno-modules-implicit-maps \
9// RUN: -fmodule-map-file-home-is-cwd \
10// RUN: -emit-module -fmodule-name=a -o %t/a.pcm \
11// RUN: Inputs/macro-ambiguity/module.modulemap
12//
13// RUN: %clang_cc1 -fmodules -x c++ -fmodules-cache-path=%t \
14// RUN: -v \
15// RUN: -iquote Inputs/macro-ambiguity/b/quote \
16// RUN: -isystem Inputs/macro-ambiguity/b/system \
17// RUN: -fno-implicit-modules -fno-modules-implicit-maps \
18// RUN: -fmodule-map-file-home-is-cwd \
19// RUN: -emit-module -fmodule-name=b -o %t/b.pcm \
20// RUN: Inputs/macro-ambiguity/module.modulemap
21//
22// RUN: %clang_cc1 -fmodules -x c++ -fmodules-cache-path=%t \
23// RUN: -v \
24// RUN: -iquote Inputs/macro-ambiguity/c/quote \
25// RUN: -isystem Inputs/macro-ambiguity/c/system \
26// RUN: -fno-implicit-modules -fno-modules-implicit-maps \
27// RUN: -fmodule-map-file-home-is-cwd \
28// RUN: -emit-module -fmodule-name=c -o %t/c.pcm \
29// RUN: Inputs/macro-ambiguity/module.modulemap
30//
31// RUN: %clang_cc1 -fmodules -x c++ -fmodules-cache-path=%t \
32// RUN: -v \
33// RUN: -iquote Inputs/macro-ambiguity/d/quote \
34// RUN: -isystem Inputs/macro-ambiguity/d/system \
35// RUN: -fno-implicit-modules -fno-modules-implicit-maps \
36// RUN: -fmodule-map-file-home-is-cwd \
37// RUN: -emit-module -fmodule-name=d -o %t/d.pcm \
38// RUN: Inputs/macro-ambiguity/module.modulemap
39//
40// RUN: %clang_cc1 -fmodules -x c++ -fmodules-cache-path=%t \
41// RUN: -v \
42// RUN: -iquote Inputs/macro-ambiguity/a/quote \
43// RUN: -isystem Inputs/macro-ambiguity/a/system \
44// RUN: -iquote Inputs/macro-ambiguity/b/quote \
45// RUN: -isystem Inputs/macro-ambiguity/b/system \
46// RUN: -iquote Inputs/macro-ambiguity/c/quote \
47// RUN: -isystem Inputs/macro-ambiguity/c/system \
48// RUN: -iquote Inputs/macro-ambiguity/d/quote \
49// RUN: -isystem Inputs/macro-ambiguity/d/system \
50// RUN: -iquote Inputs/macro-ambiguity/e/quote \
51// RUN: -isystem Inputs/macro-ambiguity/e/system \
52// RUN: -fno-implicit-modules -fno-modules-implicit-maps \
53// RUN: -fmodule-map-file-home-is-cwd \
54// RUN: -fmodule-map-file=Inputs/macro-ambiguity/module.modulemap \
55// RUN: -fmodule-file=%t/a.pcm \
56// RUN: -fmodule-file=%t/b.pcm \
57// RUN: -fmodule-file=%t/c.pcm \
58// RUN: -fmodule-file=%t/d.pcm \
59// RUN: -Wambiguous-macro -verify macro-ambiguity.cpp
60
61// Include the textual headers first to maximize the ways in which things can
62// become ambiguous.
63#include "e_quote.h"
64#include <e_system.h>
65
66#include "a_quote.h"
67#include <a_system.h>
68#include "b_quote.h"
69#include <b_system.h>
70#include "c_quote.h"
71#include <c_system.h>
72#include "d_quote.h"
73#include <d_system.h>
74
75int test(int x) {
76 // We expect to get warnings for all of the quoted includes but none of the
77 // system includes here because the first module is a non-system module and
78 // the quote macros come from non-system-headers.
79 x = FOO1_QUOTE(x); // expected-warning {{ambiguous expansion of macro}}
80 // expected-note@Inputs/macro-ambiguity/c/quote/c_quote.h:4 {{expanding this definition}}
81 // expected-note@Inputs/macro-ambiguity/a/quote/a_quote.h:4 {{other definition}}
82
83 x = FOO1_SYSTEM(x);
84
85 x = BAR1_QUOTE(x); // expected-warning {{ambiguous expansion of macro}}
86 // expected-note@Inputs/macro-ambiguity/d/quote/d_quote.h:4 {{expanding this definition}}
87 // expected-note@Inputs/macro-ambiguity/a/quote/a_quote.h:5 {{other definition}}
88
89 x = BAR1_SYSTEM(x);
90
91 x = BAZ1_QUOTE(x); // expected-warning {{ambiguous expansion of macro}}
92 // expected-note@Inputs/macro-ambiguity/a/quote/a_quote.h:6 {{expanding this definition}}
93 // expected-note@Inputs/macro-ambiguity/e/quote/e_quote.h:4 {{other definition}}
94
95 x = BAZ1_SYSTEM(x);
96
97 // Here, we don't even warn on bar because in that cas both b and d are
98 // system modules and so the use of non-system headers is irrelevant.
99 x = FOO2_QUOTE(x); // expected-warning {{ambiguous expansion of macro}}
100 // expected-note@Inputs/macro-ambiguity/c/quote/c_quote.h:5 {{expanding this definition}}
101 // expected-note@Inputs/macro-ambiguity/b/quote/b_quote.h:4 {{other definition}}
102
103 x = FOO2_SYSTEM(x);
104
105 x = BAR2_QUOTE(x);
106
107 x = BAR2_SYSTEM(x);
108
109 x = BAZ2_QUOTE(x); // expected-warning {{ambiguous expansion of macro}}
110 // expected-note@Inputs/macro-ambiguity/b/quote/b_quote.h:6 {{expanding this definition}}
111 // expected-note@Inputs/macro-ambiguity/e/quote/e_quote.h:5 {{other definition}}
112
113 x = BAZ2_SYSTEM(x);
114 return x;
115}