llvm-capstone/clang/test/Misc/diag-macro-backtrace2.c
Richard Smith 1ef7554efd DR1687: When overload resolution selects a built-in operator, implicit
conversions are only applied to operands of class type, and the second
standard conversion sequence is not applied.

When diagnosing an invalid builtin binary operator, talk about the
original types rather than the converted types. If these differ by a
user-defined conversion, tell the user what happened.

llvm-svn: 335781
2018-06-27 20:30:34 +00:00

51 lines
1.3 KiB
C

// RUN: not %clang -cc1 -fsyntax-only %s 2>&1 | FileCheck %s
#define a b
#define b c
#define c(x) d(x)
#define d(x) x*1
#define e f
#define f g
#define g(x) h(x)
#define h(x) x
void PR16799() {
const char str[] = "string";
a(str);
// CHECK: :15:3: error: invalid operands to binary expression
// CHECK: ('const char [7]' and 'int')
// CHECK: a(str);
// CHECK: ^~~~~~
// CHECK: :3:11: note: expanded from macro 'a'
// CHECK: #define a b
// CHECK: ^
// CHECK: :4:11: note: expanded from macro 'b'
// CHECK: #define b c
// CHECK: ^
// CHECK: :5:14: note: expanded from macro 'c'
// CHECK: #define c(x) d(x)
// CHECK: ^~~~
// CHECK: :6:15: note: expanded from macro 'd'
// CHECK: #define d(x) x*1
// CHECK: ~^~
e(str);
// CHECK: :33:5: warning: expression result unused
// CHECK: e(str);
// CHECK: ^~~
// CHECK: :8:11: note: expanded from macro 'e'
// CHECK: #define e f
// CHECK: ^
// CHECK: :9:11: note: expanded from macro 'f'
// CHECK: #define f g
// CHECK: ^
// CHECK: :10:16: note: expanded from macro 'g'
// CHECK: #define g(x) h(x)
// CHECK: ^
// CHECK: :11:14: note: expanded from macro 'h'
// CHECK: #define h(x) x
// CHECK: ^
}
// CHECK: 1 warning and 1 error generated.