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