summaryrefslogtreecommitdiffstats
path: root/clang/test/Misc/caret-diags-macros.c
diff options
context:
space:
mode:
authorRichard Trieu <rtrieu@google.com>2015-09-24 01:21:01 +0000
committerRichard Trieu <rtrieu@google.com>2015-09-24 01:21:01 +0000
commitc3096249c1563af20cf9d955c68ecc7d5f979079 (patch)
tree9b0ea57194f45ceb519bb3756957e9ae997f3c58 /clang/test/Misc/caret-diags-macros.c
parentb07fc572bdd21d5676f5f0ae8ab52d45718917e5 (diff)
downloadbcm5719-llvm-c3096249c1563af20cf9d955c68ecc7d5f979079.tar.gz
bcm5719-llvm-c3096249c1563af20cf9d955c68ecc7d5f979079.zip
Improve the printing of ranges when macros are involved.
Trace the ranges through the macro backtrace better. This allows better range highlighting through all levels of the macro bracktrace. Also some improvements to backtrace printer for omitting different backtraces. Patch by Zhengkai Wu. Differential Revision: http://reviews.llvm.org/D12379 llvm-svn: 248454
Diffstat (limited to 'clang/test/Misc/caret-diags-macros.c')
-rw-r--r--clang/test/Misc/caret-diags-macros.c115
1 files changed, 55 insertions, 60 deletions
diff --git a/clang/test/Misc/caret-diags-macros.c b/clang/test/Misc/caret-diags-macros.c
index 316454c513b..d499400b286 100644
--- a/clang/test/Misc/caret-diags-macros.c
+++ b/clang/test/Misc/caret-diags-macros.c
@@ -16,9 +16,6 @@ void foo() {
void bar() {
C(1);
// CHECK: {{.*}}:17:5: warning: expression result unused
- // CHECK: {{.*}}:15:16: note: expanded from macro 'C'
- // CHECK: {{.*}}:14:16: note: expanded from macro 'B'
- // CHECK: {{.*}}:13:14: note: expanded from macro 'A'
}
// rdar://7597492
@@ -41,48 +38,45 @@ void baz(char *Msg) {
void test() {
macro_args3(11);
- // CHECK: {{.*}}:43:15: warning: expression result unused
+ // CHECK: {{.*}}:40:15: warning: expression result unused
// Also check that the 'caret' printing agrees with the location here where
// its easy to FileCheck.
// CHECK-NEXT: macro_args3(11);
// CHECK-NEXT: {{^ \^~}}
- // CHECK: {{.*}}:36:36: note: expanded from macro 'macro_args3'
- // CHECK: {{.*}}:35:36: note: expanded from macro 'macro_args2'
- // CHECK: {{.*}}:34:24: note: expanded from macro 'macro_args1'
macro_many_args3(
1,
2,
3);
- // CHECK: {{.*}}:55:5: warning: expression result unused
- // CHECK: {{.*}}:40:55: note: expanded from macro 'macro_many_args3'
- // CHECK: {{.*}}:39:55: note: expanded from macro 'macro_many_args2'
- // CHECK: {{.*}}:38:35: note: expanded from macro 'macro_many_args1'
+ // CHECK: {{.*}}:49:5: warning: expression result unused
+ // CHECK: {{.*}}:37:55: note: expanded from macro 'macro_many_args3'
+ // CHECK: {{.*}}:36:55: note: expanded from macro 'macro_many_args2'
+ // CHECK: {{.*}}:35:35: note: expanded from macro 'macro_many_args1'
macro_many_args3(
1,
M2,
3);
- // CHECK: {{.*}}:64:5: warning: expression result unused
+ // CHECK: {{.*}}:58:5: warning: expression result unused
// CHECK: {{.*}}:4:12: note: expanded from macro 'M2'
- // CHECK: {{.*}}:40:55: note: expanded from macro 'macro_many_args3'
- // CHECK: {{.*}}:39:55: note: expanded from macro 'macro_many_args2'
- // CHECK: {{.*}}:38:35: note: expanded from macro 'macro_many_args1'
+ // CHECK: {{.*}}:37:55: note: expanded from macro 'macro_many_args3'
+ // CHECK: {{.*}}:36:55: note: expanded from macro 'macro_many_args2'
+ // CHECK: {{.*}}:35:35: note: expanded from macro 'macro_many_args1'
macro_many_args3(
1,
macro_args2(22),
3);
- // CHECK: {{.*}}:74:17: warning: expression result unused
+ // CHECK: {{.*}}:68:17: warning: expression result unused
// This caret location needs to be printed *inside* a different macro's
// arguments.
// CHECK-NEXT: macro_args2(22),
// CHECK-NEXT: {{^ \^~}}
- // CHECK: {{.*}}:35:36: note: expanded from macro 'macro_args2'
- // CHECK: {{.*}}:34:24: note: expanded from macro 'macro_args1'
- // CHECK: {{.*}}:40:55: note: expanded from macro 'macro_many_args3'
- // CHECK: {{.*}}:39:55: note: expanded from macro 'macro_many_args2'
- // CHECK: {{.*}}:38:35: note: expanded from macro 'macro_many_args1'
+ // CHECK: {{.*}}:32:36: note: expanded from macro 'macro_args2'
+ // CHECK: {{.*}}:31:24: note: expanded from macro 'macro_args1'
+ // CHECK: {{.*}}:37:55: note: expanded from macro 'macro_many_args3'
+ // CHECK: {{.*}}:36:55: note: expanded from macro 'macro_many_args2'
+ // CHECK: {{.*}}:35:35: note: expanded from macro 'macro_many_args1'
}
#define variadic_args1(x, y, ...) y
@@ -91,12 +85,12 @@ void test() {
void test2() {
variadic_args3(1, 22, 3, 4);
- // CHECK: {{.*}}:93:21: warning: expression result unused
+ // CHECK: {{.*}}:87:21: warning: expression result unused
// CHECK-NEXT: variadic_args3(1, 22, 3, 4);
// CHECK-NEXT: {{^ \^~}}
- // CHECK: {{.*}}:90:53: note: expanded from macro 'variadic_args3'
- // CHECK: {{.*}}:89:50: note: expanded from macro 'variadic_args2'
- // CHECK: {{.*}}:88:35: note: expanded from macro 'variadic_args1'
+ // CHECK: {{.*}}:84:53: note: expanded from macro 'variadic_args3'
+ // CHECK: {{.*}}:83:50: note: expanded from macro 'variadic_args2'
+ // CHECK: {{.*}}:82:35: note: expanded from macro 'variadic_args1'
}
#define variadic_pasting_args1(x, y, z) y
@@ -107,35 +101,35 @@ void test2() {
void test3() {
variadic_pasting_args3(1, 2, 3, 4);
- // CHECK: {{.*}}:109:32: warning: expression result unused
- // CHECK: {{.*}}:105:72: note: expanded from macro 'variadic_pasting_args3'
- // CHECK: {{.*}}:103:68: note: expanded from macro 'variadic_pasting_args2'
- // CHECK: {{.*}}:102:41: note: expanded from macro 'variadic_pasting_args1'
+ // CHECK: {{.*}}:103:32: warning: expression result unused
+ // CHECK: {{.*}}:99:72: note: expanded from macro 'variadic_pasting_args3'
+ // CHECK: {{.*}}:97:68: note: expanded from macro 'variadic_pasting_args2'
+ // CHECK: {{.*}}:96:41: note: expanded from macro 'variadic_pasting_args1'
variadic_pasting_args3a(1, 2, 3, 4);
- // CHECK: {{.*}}:115:3: warning: expression result unused
+ // CHECK: {{.*}}:109:3: warning: expression result unused
// CHECK-NEXT: variadic_pasting_args3a(1, 2, 3, 4);
- // CHECK-NEXT: {{ \^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}
- // CHECK: {{.*}}:106:44: note: expanded from macro 'variadic_pasting_args3a'
+ // CHECK-NEXT: {{ \^~~~~~~~~~~~~~~~~~~~~~~}}
+ // CHECK: {{.*}}:100:44: note: expanded from macro 'variadic_pasting_args3a'
// CHECK-NEXT: #define variadic_pasting_args3a(x, y, ...) variadic_pasting_args2a(x, y, __VA_ARGS__)
- // CHECK-NEXT: {{ \^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}
- // CHECK: {{.*}}:104:70: note: expanded from macro 'variadic_pasting_args2a'
+ // CHECK-NEXT: {{ \^~~~~~~~~~~~~~~~~~~~~~~}}
+ // CHECK: {{.*}}:98:70: note: expanded from macro 'variadic_pasting_args2a'
// CHECK-NEXT: #define variadic_pasting_args2a(x, y, ...) variadic_pasting_args1(x, y ## __VA_ARGS__)
// CHECK-NEXT: {{ \^~~~~~~~~~~~~~~~}}
- // CHECK: {{.*}}:102:41: note: expanded from macro 'variadic_pasting_args1'
+ // CHECK: {{.*}}:96:41: note: expanded from macro 'variadic_pasting_args1'
// CHECK-NEXT: #define variadic_pasting_args1(x, y, z) y
// CHECK-NEXT: {{ \^}}
}
#define BAD_CONDITIONAL_OPERATOR (2<3)?2:3
int test4 = BAD_CONDITIONAL_OPERATOR+BAD_CONDITIONAL_OPERATOR;
-// CHECK: {{.*}}:130:39: note: expanded from macro 'BAD_CONDITIONAL_OPERATOR'
+// CHECK: {{.*}}:124:39: note: expanded from macro 'BAD_CONDITIONAL_OPERATOR'
// CHECK-NEXT: #define BAD_CONDITIONAL_OPERATOR (2<3)?2:3
// CHECK-NEXT: {{^ \^}}
-// CHECK: {{.*}}:130:39: note: expanded from macro 'BAD_CONDITIONAL_OPERATOR'
+// CHECK: {{.*}}:124:39: note: expanded from macro 'BAD_CONDITIONAL_OPERATOR'
// CHECK-NEXT: #define BAD_CONDITIONAL_OPERATOR (2<3)?2:3
// CHECK-NEXT: {{^ \^}}
-// CHECK: {{.*}}:130:39: note: expanded from macro 'BAD_CONDITIONAL_OPERATOR'
+// CHECK: {{.*}}:124:39: note: expanded from macro 'BAD_CONDITIONAL_OPERATOR'
// CHECK-NEXT: #define BAD_CONDITIONAL_OPERATOR (2<3)?2:3
// CHECK-NEXT: {{^ ~~~~~\^~~~}}
@@ -143,32 +137,32 @@ int test4 = BAD_CONDITIONAL_OPERATOR+BAD_CONDITIONAL_OPERATOR;
#define TWOL (2<
#define X 1+TWOL 3) QMARK 4:5
int x = X;
-// CHECK: {{.*}}:145:9: note: place parentheses around the '+' expression to silence this warning
+// CHECK: {{.*}}:139:9: note: place parentheses around the '+' expression to silence this warning
// CHECK-NEXT: int x = X;
// CHECK-NEXT: {{^ \^}}
-// CHECK-NEXT: {{.*}}:144:21: note: expanded from macro 'X'
+// CHECK-NEXT: {{.*}}:138:21: note: expanded from macro 'X'
// CHECK-NEXT: #define X 1+TWOL 3) QMARK 4:5
// CHECK-NEXT: {{^ ~~~~~~~~~ \^}}
-// CHECK-NEXT: {{.*}}:142:15: note: expanded from macro 'QMARK'
+// CHECK-NEXT: {{.*}}:136:15: note: expanded from macro 'QMARK'
// CHECK-NEXT: #define QMARK ?
// CHECK-NEXT: {{^ \^}}
-// CHECK-NEXT: {{.*}}:145:9: note: place parentheses around the '?:' expression to evaluate it first
+// CHECK-NEXT: {{.*}}:139:9: note: place parentheses around the '?:' expression to evaluate it first
// CHECK-NEXT: int x = X;
// CHECK-NEXT: {{^ \^}}
-// CHECK-NEXT: {{.*}}:144:21: note: expanded from macro 'X'
+// CHECK-NEXT: {{.*}}:138:21: note: expanded from macro 'X'
// CHECK-NEXT: #define X 1+TWOL 3) QMARK 4:5
// CHECK-NEXT: {{^ ~~~~~~~~\^~~~~~~~~}}
#define ONEPLUS 1+
#define Y ONEPLUS (2<3) QMARK 4:5
int y = Y;
-// CHECK: {{.*}}:164:9: warning: operator '?:' has lower precedence than '+'; '+' will be evaluated first
+// CHECK: {{.*}}:158:9: warning: operator '?:' has lower precedence than '+'; '+' will be evaluated first
// CHECK-NEXT: int y = Y;
// CHECK-NEXT: {{^ \^}}
-// CHECK-NEXT: {{.*}}:163:25: note: expanded from macro 'Y'
+// CHECK-NEXT: {{.*}}:157:25: note: expanded from macro 'Y'
// CHECK-NEXT: #define Y ONEPLUS (2<3) QMARK 4:5
// CHECK-NEXT: {{^ ~~~~~~~~~~~~~ \^}}
-// CHECK-NEXT: {{.*}}:142:15: note: expanded from macro 'QMARK'
+// CHECK-NEXT: {{.*}}:136:15: note: expanded from macro 'QMARK'
// CHECK-NEXT: #define QMARK ?
// CHECK-NEXT: {{^ \^}}
@@ -179,10 +173,10 @@ void foo_aa(char* s)
#define /* */ BARC(c, /* */b, a) (a + b ? c : c)
iequals(__LINE__, BARC(123, (456 < 345), 789), 8);
}
-// CHECK: {{.*}}:180:21: warning: operator '?:' has lower precedence than '+'
+// CHECK: {{.*}}:174:21: warning: operator '?:' has lower precedence than '+'
// CHECK-NEXT: iequals(__LINE__, BARC(123, (456 < 345), 789), 8);
// CHECK-NEXT: {{^ \^~~~~~~~~~~~~~~~~~~~~~~~~~~}}
-// CHECK-NEXT: {{.*}}:179:41: note: expanded from macro 'BARC'
+// CHECK-NEXT: {{.*}}:173:41: note: expanded from macro 'BARC'
// CHECK-NEXT: #define /* */ BARC(c, /* */b, a) (a + b ? c : c)
// CHECK-NEXT: {{^ ~~~~~ \^}}
@@ -193,16 +187,16 @@ void foo_aa(char* s)
#if UTARG_MAX_U
#endif
-// CHECK: {{.*}}:193:5: warning: left side of operator converted from negative value to unsigned: -1 to 18446744073709551615
+// CHECK: {{.*}}:187:5: warning: left side of operator converted from negative value to unsigned: -1 to 18446744073709551615
// CHECK-NEXT: #if UTARG_MAX_U
// CHECK-NEXT: {{^ \^~~~~~~~~~~}}
-// CHECK-NEXT: {{.*}}:191:21: note: expanded from macro 'UTARG_MAX_U'
+// CHECK-NEXT: {{.*}}:185:21: note: expanded from macro 'UTARG_MAX_U'
// CHECK-NEXT: #define UTARG_MAX_U APPEND (MAX_UINT, UL)
// CHECK-NEXT: {{^ \^~~~~~~~~~~~~~~~~~~~~}}
-// CHECK-NEXT: {{.*}}:190:27: note: expanded from macro 'APPEND'
+// CHECK-NEXT: {{.*}}:184:27: note: expanded from macro 'APPEND'
// CHECK-NEXT: #define APPEND(NUM, SUFF) APPEND2(NUM, SUFF)
// CHECK-NEXT: {{^ \^~~~~~~~~~~~~~~~~~}}
-// CHECK-NEXT: {{.*}}:189:31: note: expanded from macro 'APPEND2'
+// CHECK-NEXT: {{.*}}:183:31: note: expanded from macro 'APPEND2'
// CHECK-NEXT: #define APPEND2(NUM, SUFF) -1 != NUM ## SUFF
// CHECK-NEXT: {{^ ~~ \^ ~~~~~~~~~~~}}
@@ -213,15 +207,16 @@ unsigned long strlen_test(const char *s);
#define Cstrlen(a) strlen_test(a)
#define Csprintf sprintf2
void f(char* pMsgBuf, char* pKeepBuf) {
-Csprintf(pMsgBuf,"\nEnter minimum anagram length (2-%1d): ", Cstrlen(pKeepBuf));
+Csprintf(pMsgBuf,"\nEnter minimum anagram length (2-%1d): ", strlen_test(pKeepBuf));
+// FIXME: Change test to use 'Cstrlen' instead of 'strlen_test' when macro printing is fixed.
}
-// CHECK: {{.*}}:216:62: warning: format specifies type 'int' but the argument has type 'unsigned long'
-// CHECK-NEXT: Csprintf(pMsgBuf,"\nEnter minimum anagram length (2-%1d): ", Cstrlen(pKeepBuf));
-// CHECK-NEXT: {{^ ~~~ \^}}
+// CHECK: {{.*}}:210:62: warning: format specifies type 'int' but the argument has type 'unsigned long'
+// CHECK-NEXT: Csprintf(pMsgBuf,"\nEnter minimum anagram length (2-%1d): ", strlen_test(pKeepBuf));
+// CHECK-NEXT: {{^ ~~~ \^~~~~~~~~~~~~~~~~~~~~}}
// CHECK-NEXT: {{^ %1lu}}
-// CHECK-NEXT: {{.*}}:213:21: note: expanded from macro 'Cstrlen'
-// CHECK-NEXT: #define Cstrlen(a) strlen_test(a)
+// CHECK-NEXT: {{.*}}:208:21: note: expanded from macro 'Csprintf'
+// CHECK-NEXT: #define Csprintf sprintf2
// CHECK-NEXT: {{^ \^}}
-// CHECK-NEXT: {{.*}}:212:56: note: expanded from macro 'sprintf2'
+// CHECK-NEXT: {{.*}}:206:56: note: expanded from macro 'sprintf2'
// CHECK-NEXT: __builtin___sprintf_chk (str, 0, __darwin_obsz(str), __VA_ARGS__)
-// CHECK-NEXT: {{^ \^}}
+// CHECK-NEXT: {{^ \^~~~~~~~~~~}}
OpenPOWER on IntegriCloud