diff options
Diffstat (limited to 'clang/test')
-rw-r--r-- | clang/test/Modules/Inputs/macros_other.h | 7 | ||||
-rw-r--r-- | clang/test/Modules/Inputs/macros_right.h | 2 | ||||
-rw-r--r-- | clang/test/Modules/Inputs/macros_right_undef.h | 3 | ||||
-rw-r--r-- | clang/test/Modules/Inputs/macros_top.h | 6 | ||||
-rw-r--r-- | clang/test/Modules/Inputs/module.map | 1 | ||||
-rw-r--r-- | clang/test/Modules/macros.c | 39 | ||||
-rw-r--r-- | clang/test/Modules/macros2.c | 77 | ||||
-rw-r--r-- | clang/test/PCH/macro-undef.cpp | 36 |
8 files changed, 163 insertions, 8 deletions
diff --git a/clang/test/Modules/Inputs/macros_other.h b/clang/test/Modules/Inputs/macros_other.h index ea686bfc558..4923a7fe56a 100644 --- a/clang/test/Modules/Inputs/macros_other.h +++ b/clang/test/Modules/Inputs/macros_other.h @@ -1 +1,6 @@ -#define OTHER_INTEGER int +#undef TOP_OTHER_UNDEF1 +#define TOP_OTHER_UNDEF2 42 +#define TOP_OTHER_REDEF1 1 +#define TOP_OTHER_REDEF1 3 + +#define TOP_OTHER_DEF_RIGHT_UNDEF 4 diff --git a/clang/test/Modules/Inputs/macros_right.h b/clang/test/Modules/Inputs/macros_right.h index dbbd2c36435..a70c3501e5c 100644 --- a/clang/test/Modules/Inputs/macros_right.h +++ b/clang/test/Modules/Inputs/macros_right.h @@ -17,3 +17,5 @@ #define TOP_RIGHT_REDEF float #define FN_ADD(x, y) (x+y) + +#undef TOP_OTHER_DEF_RIGHT_UNDEF diff --git a/clang/test/Modules/Inputs/macros_right_undef.h b/clang/test/Modules/Inputs/macros_right_undef.h index 49473e36f0c..15a83666a13 100644 --- a/clang/test/Modules/Inputs/macros_right_undef.h +++ b/clang/test/Modules/Inputs/macros_right_undef.h @@ -1 +1,4 @@ #undef TOP_RIGHT_UNDEF + +@import macros_top; +#undef TOP_OTHER_DEF_RIGHT_UNDEF diff --git a/clang/test/Modules/Inputs/macros_top.h b/clang/test/Modules/Inputs/macros_top.h index dd303ffee4e..2955471a8fa 100644 --- a/clang/test/Modules/Inputs/macros_top.h +++ b/clang/test/Modules/Inputs/macros_top.h @@ -14,3 +14,9 @@ #define TOP_RIGHT_UNDEF int +#define TOP_OTHER_UNDEF1 42 +#undef TOP_OTHER_UNDEF2 +#define TOP_OTHER_REDEF1 1 +#define TOP_OTHER_REDEF2 2 + +#define TOP_OTHER_DEF_RIGHT_UNDEF void diff --git a/clang/test/Modules/Inputs/module.map b/clang/test/Modules/Inputs/module.map index c0cdf76cdc3..0ce16fbd3e7 100644 --- a/clang/test/Modules/Inputs/module.map +++ b/clang/test/Modules/Inputs/module.map @@ -33,6 +33,7 @@ module macros_right { } } module macros { header "macros.h" } +module macros_other { header "macros_other.h" } module category_top { header "category_top.h" } module category_left { header "category_left.h" diff --git a/clang/test/Modules/macros.c b/clang/test/Modules/macros.c index 954181372a6..7a7e570ca25 100644 --- a/clang/test/Modules/macros.c +++ b/clang/test/Modules/macros.c @@ -11,10 +11,8 @@ // FIXME: expected-note@Inputs/macros_left.h:11{{previous definition is here}} // FIXME: expected-note@Inputs/macros_right.h:12{{previous definition is here}} // expected-note@Inputs/macros_right.h:12{{expanding this definition of 'LEFT_RIGHT_DIFFERENT'}} -// expected-note@Inputs/macros_top.h:13{{other definition of 'TOP_RIGHT_REDEF'}} // expected-note@Inputs/macros_right.h:13{{expanding this definition of 'LEFT_RIGHT_DIFFERENT2'}} // expected-note@Inputs/macros_left.h:14{{other definition of 'LEFT_RIGHT_DIFFERENT'}} -// expected-note@Inputs/macros_right.h:17{{expanding this definition of 'TOP_RIGHT_REDEF'}} @import macros; @@ -79,8 +77,8 @@ void f() { # error TOP should be visible #endif -#ifndef TOP_LEFT_UNDEF -# error TOP_LEFT_UNDEF should still be defined +#ifdef TOP_LEFT_UNDEF +# error TOP_LEFT_UNDEF should not be defined #endif void test1() { @@ -112,7 +110,7 @@ void test2() { int i; float f; double d; - TOP_RIGHT_REDEF *fp = &f; // expected-warning{{ambiguous expansion of macro 'TOP_RIGHT_REDEF'}} + TOP_RIGHT_REDEF *fp = &f; // ok, right's definition overrides top's definition LEFT_RIGHT_IDENTICAL *ip = &i; LEFT_RIGHT_DIFFERENT *ip2 = &i; // expected-warning{{ambiguous expansion of macro 'LEFT_RIGHT_DIFFERENT'}} @@ -134,6 +132,33 @@ void test3() { @import macros_right.undef; -#ifndef TOP_RIGHT_UNDEF -# error TOP_RIGHT_UNDEF should still be defined +// FIXME: When macros_right.undef is built, macros_top is visible because +// the state from building macros_right leaks through, so macros_right.undef +// undefines macros_top's macro. +#ifdef TOP_RIGHT_UNDEF +# error TOP_RIGHT_UNDEF should not be defined +#endif + +@import macros_other; + +#ifndef TOP_OTHER_UNDEF1 +# error TOP_OTHER_UNDEF1 should still be defined +#endif + +#ifndef TOP_OTHER_UNDEF2 +# error TOP_OTHER_UNDEF2 should still be defined #endif + +#ifndef TOP_OTHER_REDEF1 +# error TOP_OTHER_REDEF1 should still be defined +#endif +int n1 = TOP_OTHER_REDEF1; // expected-warning{{ambiguous expansion of macro 'TOP_OTHER_REDEF1'}} +// expected-note@macros_top.h:19 {{expanding this definition}} +// expected-note@macros_other.h:4 {{other definition}} + +#ifndef TOP_OTHER_REDEF2 +# error TOP_OTHER_REDEF2 should still be defined +#endif +int n2 = TOP_OTHER_REDEF2; // ok + +int n3 = TOP_OTHER_DEF_RIGHT_UNDEF; // ok diff --git a/clang/test/Modules/macros2.c b/clang/test/Modules/macros2.c new file mode 100644 index 00000000000..87b4c97d96d --- /dev/null +++ b/clang/test/Modules/macros2.c @@ -0,0 +1,77 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -fmodules -x objective-c -emit-module -fmodules-cache-path=%t -fmodule-name=macros_top %S/Inputs/module.map +// RUN: %clang_cc1 -fmodules -x objective-c -emit-module -fmodules-cache-path=%t -fmodule-name=macros_left %S/Inputs/module.map +// RUN: %clang_cc1 -fmodules -x objective-c -emit-module -fmodules-cache-path=%t -fmodule-name=macros_right %S/Inputs/module.map +// RUN: %clang_cc1 -fmodules -x objective-c -emit-module -fmodules-cache-path=%t -fmodule-name=macros %S/Inputs/module.map +// RUN: %clang_cc1 -fmodules -x objective-c -verify -fmodules-cache-path=%t -I %S/Inputs %s + +// This test checks some of the same things as macros.c, but imports modules in +// a different order. + +@import macros_other; + +int n0 = TOP_OTHER_DEF_RIGHT_UNDEF; // ok + +@import macros_top; + +TOP_OTHER_DEF_RIGHT_UNDEF *n0b; // expected-warning{{ambiguous expansion of macro 'TOP_OTHER_DEF_RIGHT_UNDEF'}} +// expected-note@macros_top.h:22 {{expanding this definition of 'TOP_OTHER_DEF_RIGHT_UNDEF'}} +// expected-note@macros_other.h:6 {{other definition of 'TOP_OTHER_DEF_RIGHT_UNDEF'}} + +@import macros_right; +@import macros_left; + +#ifdef TOP_LEFT_UNDEF +# error TOP_LEFT_UNDEF should not be defined +#endif + +#ifndef TOP_RIGHT_UNDEF +# error TOP_RIGHT_UNDEF should still be defined +#endif + +void test() { + float f; + TOP_RIGHT_REDEF *fp = &f; // ok, right's definition overrides top's definition + + // Note, left's definition wins here, whereas right's definition wins in + // macros.c. + int i; + LEFT_RIGHT_IDENTICAL *ip = &i; + LEFT_RIGHT_DIFFERENT *ip2 = &f; // expected-warning{{ambiguous expansion of macro 'LEFT_RIGHT_DIFFERENT'}} + // expected-note@macros_left.h:14 {{expanding this}} + // expected-note@macros_right.h:12 {{other}} + LEFT_RIGHT_DIFFERENT2 *ip3 = &f; // expected-warning{{ambiguous expansion of macro 'LEFT_RIGHT_DIFFERENT2}} + // expected-note@macros_left.h:11 {{expanding this}} + // expected-note@macros_right.h:13 {{other}} +#undef LEFT_RIGHT_DIFFERENT3 + int LEFT_RIGHT_DIFFERENT3; +} + +@import macros_right.undef; + +// FIXME: See macros.c. +#ifdef TOP_RIGHT_UNDEF +# error TOP_RIGHT_UNDEF should not be defined +#endif + +#ifndef TOP_OTHER_UNDEF1 +# error TOP_OTHER_UNDEF1 should still be defined +#endif + +#ifndef TOP_OTHER_UNDEF2 +# error TOP_OTHER_UNDEF2 should still be defined +#endif + +#ifndef TOP_OTHER_REDEF1 +# error TOP_OTHER_REDEF1 should still be defined +#endif +int n1 = TOP_OTHER_REDEF1; // expected-warning{{ambiguous expansion of macro 'TOP_OTHER_REDEF1'}} +// expected-note@macros_top.h:19 {{expanding this definition}} +// expected-note@macros_other.h:4 {{other definition}} + +#ifndef TOP_OTHER_REDEF2 +# error TOP_OTHER_REDEF2 should still be defined +#endif +int n2 = TOP_OTHER_REDEF2; // ok + +int n3 = TOP_OTHER_DEF_RIGHT_UNDEF; // ok diff --git a/clang/test/PCH/macro-undef.cpp b/clang/test/PCH/macro-undef.cpp new file mode 100644 index 00000000000..c0ce2de23fe --- /dev/null +++ b/clang/test/PCH/macro-undef.cpp @@ -0,0 +1,36 @@ +// RUN: %clang_cc1 -emit-pch -o %t %s +// RUN: %clang_cc1 -fsyntax-only -include-pch %t %s -Wuninitialized -verify +// RUN: %clang_cc1 -fsyntax-only -include-pch %t %s -Wuninitialized -fdiagnostics-parseable-fixits 2>&1 | FileCheck %s + +#ifndef HEADER +#define HEADER + +#define NULL 0 +template<typename T> +void *f() { + void *p; // @11 + return p; // @12 +} +#undef NULL +template<typename T> +void *g() { + void *p; // @17 + return p; // @18 +} + +#else + +// expected-warning@12 {{uninitialized}} +// expected-note@11 {{initialize}} +// CHECK: fix-it:"{{.*}}":{11:10-11:10}:" = NULL" + +// expected-warning@18 {{uninitialized}} +// expected-note@17 {{initialize}} +// CHECK: fix-it:"{{.*}}":{17:10-17:10}:" = 0" + +int main() { + f<int>(); // expected-note {{instantiation}} + g<int>(); // expected-note {{instantiation}} +} + +#endif |