1*9caa3fbeSZequan Wu // RUN: %clang_cc1 -mllvm -emptyline-comment-coverage=false -triple %itanium_abi_triple -fprofile-instrument=clang -fcoverage-mapping -dump-coverage-mapping -emit-llvm-only %s | FileCheck %s 2c0e275dfSReid Kleckner 3c0e275dfSReid Kleckner // PR39942 4c0e275dfSReid Kleckner 5c0e275dfSReid Kleckner class a; 6c0e275dfSReid Kleckner template <class b> a &operator<<(b &, const char *); 7c0e275dfSReid Kleckner int c; 8c0e275dfSReid Kleckner #define d(l) l(__FILE__, __LINE__, c) 9c0e275dfSReid Kleckner #define COMPACT_GOOGLE_LOG_ERROR d(e) 10c0e275dfSReid Kleckner #define f(g, cond) cond ? (void)0 : h() & g 11c0e275dfSReid Kleckner #define i(j) COMPACT_GOOGLE_LOG_##j.g() 12c0e275dfSReid Kleckner #define k(j) f(i(j), 0) 13c0e275dfSReid Kleckner class e { 14c0e275dfSReid Kleckner public: 15c0e275dfSReid Kleckner e(const char *, int, int); 16c0e275dfSReid Kleckner a &g(); 17c0e275dfSReid Kleckner }; 18c0e275dfSReid Kleckner class h { 19c0e275dfSReid Kleckner public: 20c0e275dfSReid Kleckner void operator&(a &); 21c0e275dfSReid Kleckner }; 22c0e275dfSReid Kleckner void use_str(const char *); 23c0e275dfSReid Kleckner 24c0e275dfSReid Kleckner #define m(func) \ 25c0e275dfSReid Kleckner use_str(#func); \ 26c0e275dfSReid Kleckner k(ERROR) << #func; \ 27c0e275dfSReid Kleckner return 0; // CHECK: File 1, [[@LINE-1]]:4 -> [[@LINE-1]]:16 = (#0 - #1) main()28c0e275dfSReid Klecknerint main() { 29c0e275dfSReid Kleckner m(asdf); 30c0e275dfSReid Kleckner } 31