brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.0 KiB · 448fb49 Raw
71 lines · cpp
1// RUN: %clang_cc1 -fsyntax-only -verify -Wno-array-bounds %s -fpascal-strings2// RUN: %clang_cc1 -fdiagnostics-parseable-fixits -x c++ %s 2>&1 -Wno-array-bounds -fpascal-strings | FileCheck %s3 4void consume(const char* c) {}5void consume(const unsigned char* c) {}6void consume(const wchar_t* c) {}7void consumeChar(char c) {}8 9enum MyEnum {10  kMySmallEnum = 1,11  kMyEnum = 512};13 14enum OperatorOverloadEnum {15  kMyOperatorOverloadedEnum = 516};17 18const char* operator+(const char* c, OperatorOverloadEnum e) {19  return "yo";20}21 22const char* operator+(OperatorOverloadEnum e, const char* c) {23  return "yo";24}25 26void f(int index) {27  // Should warn.28  // CHECK: fix-it:"{{.*}}":{31:11-31:11}:"&"29  // CHECK: fix-it:"{{.*}}":{31:17-31:18}:"["30  // CHECK: fix-it:"{{.*}}":{31:20-31:20}:"]"31  consume("foo" + 5);  // expected-warning {{adding 'int' to a string does not append to the string}} expected-note {{use array indexing to silence this warning}}32  consume("foo" + index);  // expected-warning {{adding 'int' to a string does not append to the string}} expected-note {{use array indexing to silence this warning}}33  consume("foo" + kMyEnum);  // expected-warning {{adding 'MyEnum' to a string does not append to the string}} expected-note {{use array indexing to silence this warning}}34  consume("foo" + kMySmallEnum); // expected-warning {{adding 'MyEnum' to a string does not append to the string}} expected-note {{use array indexing to silence this warning}}35 36  consume(5 + "foo");  // expected-warning {{adding 'int' to a string does not append to the string}} expected-note {{use array indexing to silence this warning}}37  consume(index + "foo");  // expected-warning {{adding 'int' to a string does not append to the string}} expected-note {{use array indexing to silence this warning}}38  consume(kMyEnum + "foo");  // expected-warning {{adding 'MyEnum' to a string does not append to the string}} expected-note {{use array indexing to silence this warning}}39  consume(kMySmallEnum + "foo"); // expected-warning {{adding 'MyEnum' to a string does not append to the string}} expected-note {{use array indexing to silence this warning}}40 41  // FIXME: suggest replacing with "foo"[5]42  consumeChar(*("foo" + 5));  // expected-warning {{adding 'int' to a string does not append to the string}} expected-note {{use array indexing to silence this warning}}43  consumeChar(*(5 + "foo"));  // expected-warning {{adding 'int' to a string does not append to the string}} expected-note {{use array indexing to silence this warning}}44 45  consume(L"foo" + 5);  // expected-warning {{adding 'int' to a string does not append to the string}} expected-note {{use array indexing to silence this warning}}46  consume(L"foo" + 2); // expected-warning {{adding 'int' to a string does not append to the string}} expected-note {{use array indexing to silence this warning}}47 48  consume("foo" + 3);  // expected-warning {{adding 'int' to a string does not append to the string}} expected-note {{use array indexing to silence this warning}}49  consume("foo" + 4);  // expected-warning {{adding 'int' to a string does not append to the string}} expected-note {{use array indexing to silence this warning}}50  consume("\pfoo" + 4);  // expected-warning {{adding 'int' to a string does not append to the string}} expected-note {{use array indexing to silence this warning}}51 52  #define A "foo"53  #define B "bar"54  consume(A B + sizeof(A) - 1); // expected-warning {{to a string does not append to the string}} expected-note {{use array indexing to silence this warning}}55 56  // Should not warn.57  consume(&("foo"[3]));58  consume(&("foo"[index]));59  consume(&("foo"[kMyEnum]));60 61 62  consume("foo" + kMyOperatorOverloadedEnum);63  consume(kMyOperatorOverloadedEnum + "foo");64}65 66template <typename T>67void PR21848() {68  (void)(sizeof(T) + ""); // expected-warning {{to a string does not append to the string}} expected-note {{use array indexing to silence this warning}}69}70template void PR21848<int>(); // expected-note {{in instantiation of function template specialization 'PR21848<int>' requested here}}71