diff options
author | John Thompson <John.Thompson.JTSoftware@gmail.com> | 2013-07-26 18:16:22 +0000 |
---|---|---|
committer | John Thompson <John.Thompson.JTSoftware@gmail.com> | 2013-07-26 18:16:22 +0000 |
commit | 98779eb65b543648039991b992a984fb3e1aca28 (patch) | |
tree | 885a7f72ebf86ccdbd332e6bad54c3f474cbcb30 /test/modularize | |
parent | 4da07108b9544daa2025a8591868140239f5e6b8 (diff) |
Added new feature for checking macro and preprocessor conditional consistency.
git-svn-id: https://llvm.org/svn/llvm-project/clang-tools-extra/trunk@187228 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/modularize')
-rw-r--r-- | test/modularize/Inputs/InconsistentSubHeader.h | 7 | ||||
-rw-r--r-- | test/modularize/ProblemsInconsistent.modularize | 106 |
2 files changed, 108 insertions, 5 deletions
diff --git a/test/modularize/Inputs/InconsistentSubHeader.h b/test/modularize/Inputs/InconsistentSubHeader.h index 92e7d036..ab02b250 100644 --- a/test/modularize/Inputs/InconsistentSubHeader.h +++ b/test/modularize/Inputs/InconsistentSubHeader.h @@ -1,11 +1,18 @@ // Set up so TypeInt only defined during InconsistentHeader1.h include. #ifdef SYMBOL1 #define SYMBOL 1 +#define FUNC_STYLE(a, b) a || b #endif #ifdef SYMBOL2 #define SYMBOL 2 +#define FUNC_STYLE(a, b) a &&b #endif #if SYMBOL == 1 typedef int TypeInt; #endif + +int var = FUNC_STYLE(1, 0); + +#if defined(SYMBOL1) +#endif diff --git a/test/modularize/ProblemsInconsistent.modularize b/test/modularize/ProblemsInconsistent.modularize index 2afd28d4..f2206905 100644 --- a/test/modularize/ProblemsInconsistent.modularize +++ b/test/modularize/ProblemsInconsistent.modularize @@ -4,9 +4,105 @@ Inputs/InconsistentHeader1.h Inputs/InconsistentHeader2.h # CHECK: error: macro 'SYMBOL' defined at multiple locations: -# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h:3:9 -# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h:6:9 -# CHECK-NEXT: error: header '{{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h' has different contents depending on how it was included +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h:3:9 +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h:7:9 +# CHECK-NEXT: error: macro 'FUNC_STYLE' defined at multiple locations: +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h:4:9 +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h:8:9 +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h:15:11: +# CHECK-NEXT: int var = FUNC_STYLE(1, 0); +# CHECK-NEXT: ^ +# CHECK-NEXT: error: Macro instance 'FUNC_STYLE(1, 0);' has different values in this header, depending on how it was included. +# CHECK-NEXT: 'FUNC_STYLE(1, 0);' expanded to: '1||0' with respect to these inclusion paths: +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentHeader1.h +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h:4:9: +# CHECK-NEXT: #define FUNC_STYLE(a, b) a || b +# CHECK-NEXT: ^ +# CHECK-NEXT: Macro defined here. +# CHECK-NEXT: 'FUNC_STYLE(1, 0);' expanded to: '1&&0' with respect to these inclusion paths: +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentHeader2.h +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h:8:9: +# CHECK-NEXT: #define FUNC_STYLE(a, b) a &&b +# CHECK-NEXT: ^ +# CHECK-NEXT: Macro defined here. +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h:11:5: +# CHECK-NEXT: #if SYMBOL == 1 +# CHECK-NEXT: ^ +# CHECK-NEXT: error: Macro instance 'SYMBOL' has different values in this header, depending on how it was included. +# CHECK-NEXT: 'SYMBOL' expanded to: '1' with respect to these inclusion paths: +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentHeader1.h +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h:3:9: +# CHECK-NEXT: #define SYMBOL 1 +# CHECK-NEXT: ^ +# CHECK-NEXT: Macro defined here. +# CHECK-NEXT: 'SYMBOL' expanded to: '2' with respect to these inclusion paths: +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentHeader2.h +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h:7:9: +# CHECK-NEXT: #define SYMBOL 2 +# CHECK-NEXT: ^ +# CHECK-NEXT: Macro defined here. +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h:17:5: +# CHECK-NEXT: #if defined(SYMBOL1) +# CHECK-NEXT: ^ +# CHECK-NEXT: error: Macro instance 'defined(SYMBOL1)' has different values in this header, depending on how it was included. +# CHECK-NEXT: 'defined(SYMBOL1)' expanded to: 'true' with respect to these inclusion paths: +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentHeader1.h +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentHeader1.h:3:9: +# CHECK-NEXT: #define SYMBOL1 1 +# CHECK-NEXT: ^ +# CHECK-NEXT: Macro defined here. +# CHECK-NEXT: 'defined(SYMBOL1)' expanded to: 'false' with respect to these inclusion paths: +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentHeader2.h +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h +# CHECK-NEXT: (no macro definition) +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h:11:2 +# CHECK-NEXT: #if SYMBOL == 1 +# CHECK-NEXT: ^ +# CHECK-NEXT: error: Conditional expression instance 'SYMBOL == 1' has different values in this header, depending on how it was included. +# CHECK-NEXT: 'SYMBOL == 1' expanded to: 'true' with respect to these inclusion paths: +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentHeader1.h +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h +# CHECK-NEXT: 'SYMBOL == 1' expanded to: 'false' with respect to these inclusion paths: +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentHeader2.h +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h:2:2 +# CHECK-NEXT: #ifdef SYMBOL1 +# CHECK-NEXT: ^ +# CHECK-NEXT: error: Conditional expression instance 'SYMBOL1' has different values in this header, depending on how it was included. +# CHECK-NEXT: 'SYMBOL1' expanded to: 'true' with respect to these inclusion paths: +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentHeader1.h +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h +# CHECK-NEXT: 'SYMBOL1' expanded to: 'false' with respect to these inclusion paths: +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentHeader2.h +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h:6:2 +# CHECK-NEXT: #ifdef SYMBOL2 +# CHECK-NEXT: ^ +# CHECK-NEXT: error: Conditional expression instance 'SYMBOL2' has different values in this header, depending on how it was included. +# CHECK-NEXT: 'SYMBOL2' expanded to: 'false' with respect to these inclusion paths: +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentHeader1.h +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h +# CHECK-NEXT: 'SYMBOL2' expanded to: 'true' with respect to these inclusion paths: +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentHeader2.h +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h:17:2 +# CHECK-NEXT: #if defined(SYMBOL1) +# CHECK-NEXT: ^ +# CHECK-NEXT: error: Conditional expression instance 'defined(SYMBOL1)' has different values in this header, depending on how it was included. +# CHECK-NEXT: 'defined(SYMBOL1)' expanded to: 'true' with respect to these inclusion paths: +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentHeader1.h +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h +# CHECK-NEXT: 'defined(SYMBOL1)' expanded to: 'false' with respect to these inclusion paths: +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentHeader2.h +# CHECK-NEXT: {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h +# CHECK-NEXT: error: header '{{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h' has different contents depending on how it was included. # CHECK-NEXT: note: 'SYMBOL' in {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h at 3:9 not always provided -# CHECK-NEXT: note: 'SYMBOL' in {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h at 6:9 not always provided -# CHECK-NEXT: note: 'TypeInt' in {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h at 10:13 not always provided +# CHECK-NEXT: note: 'FUNC_STYLE' in {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h at 4:9 not always provided +# CHECK-NEXT: note: 'SYMBOL' in {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h at 7:9 not always provided +# CHECK-NEXT: note: 'FUNC_STYLE' in {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h at 8:9 not always provided +# CHECK-NEXT: note: 'TypeInt' in {{.*}}{{[/\\]}}Inputs{{[/\\]}}InconsistentSubHeader.h at 12:13 not always provided |