diff --git a/clang-tools-extra/test/clang-tidy/checkers/bugprone/no-escape.m b/clang-tools-extra/test/clang-tidy/checkers/bugprone/no-escape.m --- a/clang-tools-extra/test/clang-tidy/checkers/bugprone/no-escape.m +++ b/clang-tools-extra/test/clang-tidy/checkers/bugprone/no-escape.m @@ -1,5 +1,5 @@ -// RUN: %check_clang_tidy %s bugprone-no-escape %t -// RUN: %check_clang_tidy %s -assume-filename=bugprone-no-escape.c bugprone-no-escape %t -- -- -fblocks +// RUN: %check_clang_tidy %s bugprone-no-escape %t -- -- -Wno-int-conversion +// RUN: %check_clang_tidy %s -assume-filename=bugprone-no-escape.c bugprone-no-escape %t -- -- -fblocks -Wno-int-conversion typedef struct dispatch_queue_s *dispatch_queue_t; typedef struct dispatch_time_s *dispatch_time_t; diff --git a/clang-tools-extra/test/clang-tidy/checkers/performance/no-int-to-ptr.c b/clang-tools-extra/test/clang-tidy/checkers/performance/no-int-to-ptr.c --- a/clang-tools-extra/test/clang-tidy/checkers/performance/no-int-to-ptr.c +++ b/clang-tools-extra/test/clang-tidy/checkers/performance/no-int-to-ptr.c @@ -1,4 +1,4 @@ -// RUN: %check_clang_tidy %s performance-no-int-to-ptr %t +// RUN: %check_clang_tidy %s performance-no-int-to-ptr %t -- -- -Wno-int-conversion void *t0(char x) { return x; diff --git a/clang/bindings/python/tests/cindex/test_diagnostics.py b/clang/bindings/python/tests/cindex/test_diagnostics.py --- a/clang/bindings/python/tests/cindex/test_diagnostics.py +++ b/clang/bindings/python/tests/cindex/test_diagnostics.py @@ -26,7 +26,7 @@ # FIXME: We aren't getting notes here for some reason. tu = get_tu('#define A x\nvoid *A = 1;\n') self.assertEqual(len(tu.diagnostics), 1) - self.assertEqual(tu.diagnostics[0].severity, Diagnostic.Warning) + self.assertEqual(tu.diagnostics[0].severity, Diagnostic.Error) self.assertEqual(tu.diagnostics[0].location.line, 2) self.assertEqual(tu.diagnostics[0].location.column, 7) self.assertIn('incompatible', tu.diagnostics[0].spelling) @@ -53,7 +53,7 @@ def test_diagnostic_range(self): tu = get_tu('void f() { int i = "a"; }') self.assertEqual(len(tu.diagnostics), 1) - self.assertEqual(tu.diagnostics[0].severity, Diagnostic.Warning) + self.assertEqual(tu.diagnostics[0].severity, Diagnostic.Error) self.assertEqual(tu.diagnostics[0].location.line, 1) self.assertEqual(tu.diagnostics[0].location.column, 16) self.assertRegex(tu.diagnostics[0].spelling, diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -297,6 +297,11 @@ member of the contained class. - Added ``-Winvalid-utf8`` which diagnoses invalid UTF-8 code unit sequences in comments. +- The ``-Wint-conversion`` warning diagnostic for implicit int <-> pointer + conversions now defaults to an error in all C language modes. It may be + downgraded to a warning with ``-Wno-error=int-conversion``, or disabled + entirely with ``-Wno-int-conversion``. + Non-comprehensive list of changes in this release ------------------------------------------------- diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td --- a/clang/include/clang/Basic/DiagnosticSemaKinds.td +++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td @@ -8037,24 +8037,6 @@ "sending type to parameter of incompatible type}0,1" "|%diff{casting $ to incompatible type $|" "casting type to incompatible type}0,1}2">; -def ext_typecheck_convert_pointer_int : ExtWarn< - "incompatible pointer to integer conversion " - "%select{%diff{assigning to $ from $|assigning to different types}0,1" - "|%diff{passing $ to parameter of type $|" - "passing to parameter of different type}0,1" - "|%diff{returning $ from a function with result type $|" - "returning from function with different return type}0,1" - "|%diff{converting $ to type $|converting between types}0,1" - "|%diff{initializing $ with an expression of type $|" - "initializing with expression of different type}0,1" - "|%diff{sending $ to parameter of type $|" - "sending to parameter of different type}0,1" - "|%diff{casting $ to type $|casting between types}0,1}2" - "%select{|; dereference with *|" - "; take the address with &|" - "; remove *|" - "; remove &}3">, - InGroup; def err_typecheck_convert_pointer_int : Error< "incompatible pointer to integer conversion " "%select{%diff{assigning to $ from $|assigning to different types}0,1" @@ -8072,24 +8054,9 @@ "; take the address with &|" "; remove *|" "; remove &}3">; -def ext_typecheck_convert_int_pointer : ExtWarn< - "incompatible integer to pointer conversion " - "%select{%diff{assigning to $ from $|assigning to different types}0,1" - "|%diff{passing $ to parameter of type $|" - "passing to parameter of different type}0,1" - "|%diff{returning $ from a function with result type $|" - "returning from function with different return type}0,1" - "|%diff{converting $ to type $|converting between types}0,1" - "|%diff{initializing $ with an expression of type $|" - "initializing with expression of different type}0,1" - "|%diff{sending $ to parameter of type $|" - "sending to parameter of different type}0,1" - "|%diff{casting $ to type $|casting between types}0,1}2" - "%select{|; dereference with *|" - "; take the address with &|" - "; remove *|" - "; remove &}3">, - InGroup, SFINAEFailure; +def ext_typecheck_convert_pointer_int : ExtWarn< + err_typecheck_convert_pointer_int.Text>, + InGroup, DefaultError; def err_typecheck_convert_int_pointer : Error< "incompatible integer to pointer conversion " "%select{%diff{assigning to $ from $|assigning to different types}0,1" @@ -8107,6 +8074,9 @@ "; take the address with &|" "; remove *|" "; remove &}3">; +def ext_typecheck_convert_int_pointer : ExtWarn< + err_typecheck_convert_int_pointer.Text>, + InGroup, DefaultError; def ext_typecheck_convert_pointer_void_func : Extension< "%select{%diff{assigning to $ from $|assigning to different types}0,1" "|%diff{passing $ to parameter of type $|" diff --git a/clang/test/Analysis/ObjCProperties.m b/clang/test/Analysis/ObjCProperties.m --- a/clang/test/Analysis/ObjCProperties.m +++ b/clang/test/Analysis/ObjCProperties.m @@ -1,4 +1,4 @@ -// RUN: %clang_analyze_cc1 -w %s -verify \ +// RUN: %clang_analyze_cc1 -w -Wno-int-conversion %s -verify \ // RUN: -analyzer-checker=core,alpha.core,debug.ExprInspection #ifdef HEADER // A clever trick to avoid splitting up the test. diff --git a/clang/test/Analysis/bsd-string.c b/clang/test/Analysis/bsd-string.c --- a/clang/test/Analysis/bsd-string.c +++ b/clang/test/Analysis/bsd-string.c @@ -1,4 +1,4 @@ -// RUN: %clang_analyze_cc1 -w -verify %s \ +// RUN: %clang_analyze_cc1 -w -Wno-int-conversion -verify %s \ // RUN: -analyzer-checker=core \ // RUN: -analyzer-checker=unix.cstring.NullArg \ // RUN: -analyzer-checker=alpha.unix.cstring \ diff --git a/clang/test/Analysis/novoidtypecrash.c b/clang/test/Analysis/novoidtypecrash.c --- a/clang/test/Analysis/novoidtypecrash.c +++ b/clang/test/Analysis/novoidtypecrash.c @@ -1,4 +1,4 @@ -// RUN: %clang_analyze_cc1 -std=c89 -analyzer-checker=core %s +// RUN: %clang_analyze_cc1 -std=c89 -Wno-int-conversion -analyzer-checker=core %s x; y(void **z) { // no-crash *z = x; diff --git a/clang/test/Analysis/null-deref-ps.c b/clang/test/Analysis/null-deref-ps.c --- a/clang/test/Analysis/null-deref-ps.c +++ b/clang/test/Analysis/null-deref-ps.c @@ -1,5 +1,5 @@ -// RUN: %clang_analyze_cc1 -triple i386-apple-darwin10 -Wno-strict-prototypes -Wno-tautological-constant-compare -Wtautological-unsigned-zero-compare -analyzer-checker=core,deadcode,alpha.core -std=gnu99 -analyzer-purge=none -verify %s -Wno-error=return-type -// RUN: %clang_analyze_cc1 -triple i386-apple-darwin10 -Wno-strict-prototypes -Wno-tautological-constant-compare -Wtautological-unsigned-zero-compare -analyzer-checker=core,deadcode,alpha.core -std=gnu99 -verify %s -Wno-error=return-type +// RUN: %clang_analyze_cc1 -triple i386-apple-darwin10 -Wno-int-conversion -Wno-strict-prototypes -Wno-tautological-constant-compare -Wtautological-unsigned-zero-compare -analyzer-checker=core,deadcode,alpha.core -std=gnu99 -analyzer-purge=none -verify %s -Wno-error=return-type +// RUN: %clang_analyze_cc1 -triple i386-apple-darwin10 -Wno-int-conversion -Wno-strict-prototypes -Wno-tautological-constant-compare -Wtautological-unsigned-zero-compare -analyzer-checker=core,deadcode,alpha.core -std=gnu99 -verify %s -Wno-error=return-type typedef unsigned uintptr_t; @@ -10,7 +10,7 @@ #define assert(expr) \ ((expr) ? (void)(0) : __assert_fail (#expr, __FILE__, __LINE__, __func__)) -void f1(int *p) { +void f1(int *p) { if (p) *p = 1; else *p = 0; // expected-warning{{ereference}} } @@ -20,48 +20,48 @@ }; int f2(struct foo_struct* p) { - + if (p) p->x = 1; - + return p->x++; // expected-warning{{Access to field 'x' results in a dereference of a null pointer (loaded from variable 'p')}} } int f3(char* x) { - + int i = 2; - + if (x) return x[i - 1]; - + return x[i+1]; // expected-warning{{Array access (from variable 'x') results in a null pointer dereference}} } int f3_b(char* x) { - + int i = 2; - + if (x) return x[i - 1]; - + return x[i+1]++; // expected-warning{{Array access (from variable 'x') results in a null pointer dereference}} } int f4(int *p) { - + uintptr_t x = (uintptr_t) p; - + if (x) return 1; - + int *q = (int*) x; return *q; // expected-warning{{Dereference of null pointer (loaded from variable 'q')}} } int f4_b(void) { short array[2]; - uintptr_t x = array; // expected-warning{{incompatible pointer to integer conversion}} - short *p = x; // expected-warning{{incompatible integer to pointer conversion}} + uintptr_t x = array; + short *p = x; // The following branch should be infeasible. if (!(p == &array[0])) { @@ -80,21 +80,21 @@ } int f5(void) { - + char *s = "hello world"; return s[0]; // no-warning } int bar(int* p, int q) __attribute__((nonnull)); -int f6(int *p) { +int f6(int *p) { return !p ? bar(p, 1) // expected-warning {{Null pointer passed to 1st parameter expecting 'nonnull'}} : bar(p, 0); // no-warning } int bar2(int* p, int q) __attribute__((nonnull(1))); -int f6b(int *p) { +int f6b(int *p) { return !p ? bar2(p, 1) // expected-warning {{Null pointer passed to 1st parameter expecting 'nonnull'}} : bar2(p, 0); // no-warning } @@ -111,8 +111,8 @@ // At this point, 'p' cannot be null. if (!p) { int *q = 0; - *q = 0xDEADBEEF; // no-warning - } + *q = 0xDEADBEEF; // no-warning + } } void f6e(int *p, int offset) { @@ -123,38 +123,38 @@ int* qux(); int f7(int x) { - + int* p = 0; - + if (0 == x) p = qux(); - + if (0 == x) *p = 1; // no-warning - + return x; } int* f7b(int *x) { - + int* p = 0; - + if (((void*)0) == x) p = qux(); - + if (((void*)0) == x) *p = 1; // no-warning - + return x; } int* f7c(int *x) { - + int* p = 0; - + if (((void*)0) == x) p = qux(); - + if (((void*)0) != x) return x; @@ -164,15 +164,15 @@ } int* f7c2(int *x) { - + int* p = 0; - + if (((void*)0) == x) p = qux(); - + if (((void*)0) == x) return x; - + *p = 1; // expected-warning{{null}} return x; } @@ -182,7 +182,7 @@ if (!p) if (p) *p = 1; // no-warning - + if (q) if (!q) *q = 1; // no-warning @@ -217,7 +217,7 @@ // LHS and RHS have different bitwidths. The new symbolic value // for 'x' should have a bitwidth of 8. x &= y; - + // This tests that our symbolication worked, and that we correctly test // x against 0 (with the same bitwidth). if (!x) { @@ -270,7 +270,7 @@ default: return; } - + *p = 1; // no-warning } diff --git a/clang/test/Analysis/number-object-conversion.c b/clang/test/Analysis/number-object-conversion.c --- a/clang/test/Analysis/number-object-conversion.c +++ b/clang/test/Analysis/number-object-conversion.c @@ -1,5 +1,5 @@ -// RUN: %clang_analyze_cc1 -triple i386-apple-darwin10 -w -analyzer-checker=osx.NumberObjectConversion %s -verify -// RUN: %clang_analyze_cc1 -triple i386-apple-darwin10 -w -analyzer-checker=osx.NumberObjectConversion -analyzer-config osx.NumberObjectConversion:Pedantic=true -DPEDANTIC %s -verify +// RUN: %clang_analyze_cc1 -triple i386-apple-darwin10 -w -Wno-int-conversion -analyzer-checker=osx.NumberObjectConversion %s -verify +// RUN: %clang_analyze_cc1 -triple i386-apple-darwin10 -w -Wno-int-conversion -analyzer-checker=osx.NumberObjectConversion -analyzer-config osx.NumberObjectConversion:Pedantic=true -DPEDANTIC %s -verify #define NULL ((void *)0) diff --git a/clang/test/Analysis/number-object-conversion.m b/clang/test/Analysis/number-object-conversion.m --- a/clang/test/Analysis/number-object-conversion.m +++ b/clang/test/Analysis/number-object-conversion.m @@ -1,7 +1,7 @@ -// RUN: %clang_analyze_cc1 -triple i386-apple-darwin10 -fblocks -w -analyzer-checker=osx.NumberObjectConversion %s -verify -// RUN: %clang_analyze_cc1 -triple i386-apple-darwin10 -fblocks -w -analyzer-checker=osx.NumberObjectConversion -analyzer-config osx.NumberObjectConversion:Pedantic=true -DPEDANTIC %s -verify -// RUN: %clang_analyze_cc1 -triple i386-apple-darwin10 -fblocks -fobjc-arc -w -analyzer-checker=osx.NumberObjectConversion %s -verify -// RUN: %clang_analyze_cc1 -triple i386-apple-darwin10 -fblocks -fobjc-arc -w -analyzer-checker=osx.NumberObjectConversion -analyzer-config osx.NumberObjectConversion:Pedantic=true -DPEDANTIC %s -verify +// RUN: %clang_analyze_cc1 -triple i386-apple-darwin10 -fblocks -w -Wno-int-conversion -analyzer-checker=osx.NumberObjectConversion %s -verify +// RUN: %clang_analyze_cc1 -triple i386-apple-darwin10 -fblocks -w -Wno-int-conversion -analyzer-checker=osx.NumberObjectConversion -analyzer-config osx.NumberObjectConversion:Pedantic=true -DPEDANTIC %s -verify +// RUN: %clang_analyze_cc1 -triple i386-apple-darwin10 -fblocks -fobjc-arc -w -Wno-int-conversion -analyzer-checker=osx.NumberObjectConversion %s -verify +// RUN: %clang_analyze_cc1 -triple i386-apple-darwin10 -fblocks -fobjc-arc -w -Wno-int-conversion -analyzer-checker=osx.NumberObjectConversion -analyzer-config osx.NumberObjectConversion:Pedantic=true -DPEDANTIC %s -verify #include "Inputs/system-header-simulator-objc.h" diff --git a/clang/test/Analysis/pr22954.c b/clang/test/Analysis/pr22954.c --- a/clang/test/Analysis/pr22954.c +++ b/clang/test/Analysis/pr22954.c @@ -3,7 +3,7 @@ // At the moment the whole of the destination array content is invalidated. // If a.s1 region has a symbolic offset, the whole region of 'a' is invalidated. // Specific triple set to test structures of size 0. -// RUN: %clang_analyze_cc1 -triple x86_64-pc-linux-gnu -analyzer-checker=core,unix.Malloc,debug.ExprInspection -verify -analyzer-config eagerly-assume=false %s +// RUN: %clang_analyze_cc1 -triple x86_64-pc-linux-gnu -analyzer-checker=core,unix.Malloc,debug.ExprInspection -Wno-error=int-conversion -verify -analyzer-config eagerly-assume=false %s typedef __typeof(sizeof(int)) size_t; diff --git a/clang/test/C/drs/dr0xx.c b/clang/test/C/drs/dr0xx.c --- a/clang/test/C/drs/dr0xx.c +++ b/clang/test/C/drs/dr0xx.c @@ -363,7 +363,7 @@ } char *dr064_2(int i, int *pi) { - return (*pi = i, 0); /* expected-warning {{incompatible integer to pointer conversion returning 'int' from a function with result type 'char *'}} */ + return (*pi = i, 0); /* expected-error {{incompatible integer to pointer conversion returning 'int' from a function with result type 'char *'}} */ } /* WG14 DR068: yes diff --git a/clang/test/C/drs/dr2xx.c b/clang/test/C/drs/dr2xx.c --- a/clang/test/C/drs/dr2xx.c +++ b/clang/test/C/drs/dr2xx.c @@ -299,10 +299,10 @@ /* This is an invalid initialization/assignment because the right-hand side * does not have pointer to void or pointer to char type and is not the null * pointer constant. */ - char *p2 = (42, 1 - 1); /* expected-warning {{incompatible integer to pointer conversion initializing 'char *' with an expression of type 'int'}} + char *p2 = (42, 1 - 1); /* expected-error {{incompatible integer to pointer conversion initializing 'char *' with an expression of type 'int'}} expected-warning {{left operand of comma operator has no effect}} */ - p1 = (42, 1 - 1); /* expected-warning {{incompatible integer to pointer conversion assigning to 'char *' from 'int'}} + p1 = (42, 1 - 1); /* expected-error {{incompatible integer to pointer conversion assigning to 'char *' from 'int'}} expected-warning {{left operand of comma operator has no effect}} */ diff --git a/clang/test/CodeGen/2008-03-05-syncPtr.c b/clang/test/CodeGen/2008-03-05-syncPtr.c --- a/clang/test/CodeGen/2008-03-05-syncPtr.c +++ b/clang/test/CodeGen/2008-03-05-syncPtr.c @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -no-opaque-pointers -triple x86_64-apple-darwin %s -emit-llvm -o - | FileCheck %s +// RUN: %clang_cc1 -no-opaque-pointers -triple x86_64-apple-darwin -Wno-int-conversion %s -emit-llvm -o - | FileCheck %s int* foo(int** a, int* b, int* c) { return __sync_val_compare_and_swap (a, b, c); diff --git a/clang/test/CodeGen/2008-07-31-promotion-of-compound-pointer-arithmetic.c b/clang/test/CodeGen/2008-07-31-promotion-of-compound-pointer-arithmetic.c --- a/clang/test/CodeGen/2008-07-31-promotion-of-compound-pointer-arithmetic.c +++ b/clang/test/CodeGen/2008-07-31-promotion-of-compound-pointer-arithmetic.c @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -triple i386-unknown-unknown -O1 -emit-llvm -o - %s | FileCheck %s +// RUN: %clang_cc1 -triple i386-unknown-unknown -O1 -Wno-int-conversion -emit-llvm -o - %s | FileCheck %s // CHECK-LABEL: define{{.*}} i32 @f0 // CHECK: ret i32 1 // CHECK-LABEL: define{{.*}} i32 @f1 diff --git a/clang/test/CodeGen/aarch64-mops.c b/clang/test/CodeGen/aarch64-mops.c --- a/clang/test/CodeGen/aarch64-mops.c +++ b/clang/test/CodeGen/aarch64-mops.c @@ -1,7 +1,7 @@ -// RUN: %clang_cc1 -triple aarch64-arm-unknown-eabi -target-feature +mops -target-feature +mte -w -S -emit-llvm -o - %s | FileCheck --check-prefix=CHECK-MOPS %s -// RUN: %clang_cc1 -triple aarch64-arm-unknown-eabi -target-feature +mops -Wno-implicit-function-declaration -w -S -emit-llvm -o - %s | FileCheck --check-prefix=CHECK-NOMOPS %s -// RUN: %clang_cc1 -triple aarch64-arm-unknown-eabi -Wno-implicit-function-declaration -target-feature +mte -w -S -emit-llvm -o - %s | FileCheck --check-prefix=CHECK-NOMOPS %s -// RUN: %clang_cc1 -triple aarch64-arm-unknown-eabi -Wno-implicit-function-declaration -w -S -emit-llvm -o - %s | FileCheck --check-prefix=CHECK-NOMOPS %s +// RUN: %clang_cc1 -triple aarch64-arm-unknown-eabi -Wno-int-conversion -target-feature +mops -target-feature +mte -w -S -emit-llvm -o - %s | FileCheck --check-prefix=CHECK-MOPS %s +// RUN: %clang_cc1 -triple aarch64-arm-unknown-eabi -Wno-int-conversion -target-feature +mops -Wno-implicit-function-declaration -w -S -emit-llvm -o - %s | FileCheck --check-prefix=CHECK-NOMOPS %s +// RUN: %clang_cc1 -triple aarch64-arm-unknown-eabi -Wno-int-conversion -Wno-implicit-function-declaration -target-feature +mte -w -S -emit-llvm -o - %s | FileCheck --check-prefix=CHECK-NOMOPS %s +// RUN: %clang_cc1 -triple aarch64-arm-unknown-eabi -Wno-int-conversion -Wno-implicit-function-declaration -w -S -emit-llvm -o - %s | FileCheck --check-prefix=CHECK-NOMOPS %s #include #include diff --git a/clang/test/CodeGen/address-space-cast.c b/clang/test/CodeGen/address-space-cast.c --- a/clang/test/CodeGen/address-space-cast.c +++ b/clang/test/CodeGen/address-space-cast.c @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -emit-llvm < %s +// RUN: %clang_cc1 -emit-llvm -Wno-int-conversion < %s volatile unsigned char* const __attribute__((address_space(1))) serial_ctrl = 0x02; diff --git a/clang/test/CodeGen/const-init.c b/clang/test/CodeGen/const-init.c --- a/clang/test/CodeGen/const-init.c +++ b/clang/test/CodeGen/const-init.c @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -no-opaque-pointers -triple i386-pc-linux-gnu -ffreestanding -Wno-pointer-to-int-cast -verify -emit-llvm -o - %s | FileCheck %s +// RUN: %clang_cc1 -no-opaque-pointers -triple i386-pc-linux-gnu -ffreestanding -Wno-pointer-to-int-cast -Wno-int-conversion -emit-llvm -o - %s | FileCheck %s #include @@ -11,10 +11,10 @@ // Double-implicit-conversions of array/functions (not legal C, but // clang accepts it for gcc compat). -intptr_t b = a; // expected-warning {{incompatible pointer to integer conversion}} +intptr_t b = a; int c(void); void *d = c; -intptr_t e = c; // expected-warning {{incompatible pointer to integer conversion}} +intptr_t e = c; int f, *g = __extension__ &f, *h = (1 != 1) ? &f : &f; @@ -59,7 +59,7 @@ } __attribute__((__packed__)) gv1 = { .a = 0x0, .b = 7, }; // PR5118 -// CHECK: @gv2 ={{.*}} global %struct.anon.0 <{ i8 1, i8* null }>, align 1 +// CHECK: @gv2 ={{.*}} global %struct.anon.0 <{ i8 1, i8* null }>, align 1 struct { unsigned char a; char *b; @@ -67,9 +67,9 @@ // Global references // CHECK: @g11.l0 = internal global i32 ptrtoint (i32 ()* @g11 to i32) -long g11(void) { +long g11(void) { static long l0 = (long) g11; - return l0; + return l0; } // CHECK: @g12 ={{.*}} global i32 ptrtoint (i8* @g12_tmp to i32) @@ -156,7 +156,7 @@ // CHECK: @g29.b = internal global [1 x i32] [i32 ptrtoint ([5 x i8]* @.str.1 to i32)], align 4 // CHECK: @g29.c = internal global [1 x i32] [i32 97], align 4 static DCC_SRVR_NM a = { {"@"} }; - static int b[1] = { "asdf" }; // expected-warning {{incompatible pointer to integer conversion initializing 'int' with an expression of type 'char[5]'}} + static int b[1] = { "asdf" }; static int c[1] = { L"a" }; } diff --git a/clang/test/CodeGen/pointer-arithmetic.c b/clang/test/CodeGen/pointer-arithmetic.c --- a/clang/test/CodeGen/pointer-arithmetic.c +++ b/clang/test/CodeGen/pointer-arithmetic.c @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -S %s -o - +// RUN: %clang_cc1 -S -Wno-int-conversions %s -o - typedef int Int; diff --git a/clang/test/CodeGen/pointer-to-int.c b/clang/test/CodeGen/pointer-to-int.c --- a/clang/test/CodeGen/pointer-to-int.c +++ b/clang/test/CodeGen/pointer-to-int.c @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -emit-llvm %s -o - +// RUN: %clang_cc1 -emit-llvm -Wno-int-conversion %s -o - int test(void* i) { diff --git a/clang/test/CodeGen/statements.c b/clang/test/CodeGen/statements.c --- a/clang/test/CodeGen/statements.c +++ b/clang/test/CodeGen/statements.c @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -Wno-error=return-type %s -emit-llvm-only +// RUN: %clang_cc1 -Wno-error=return-type -Wno-error=int-conversion %s -emit-llvm-only // REQUIRES: LP64 // Mismatched type between return and function result. diff --git a/clang/test/CodeGen/struct-init.c b/clang/test/CodeGen/struct-init.c --- a/clang/test/CodeGen/struct-init.c +++ b/clang/test/CodeGen/struct-init.c @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -no-opaque-pointers -triple armv7-apple-darwin -target-feature +neon %s -emit-llvm -o - | FileCheck %s +// RUN: %clang_cc1 -no-opaque-pointers -Wno-int-conversion -triple armv7-apple-darwin -target-feature +neon %s -emit-llvm -o - | FileCheck %s typedef struct _zend_ini_entry zend_ini_entry; struct _zend_ini_entry { diff --git a/clang/test/CodeGen/vla.c b/clang/test/CodeGen/vla.c --- a/clang/test/CodeGen/vla.c +++ b/clang/test/CodeGen/vla.c @@ -1,5 +1,5 @@ -// RUN: %clang_cc1 -no-opaque-pointers -triple i386-unknown-unknown %s -emit-llvm -o - | FileCheck %s -check-prefixes=CHECK,NULL-INVALID -// RUN: %clang_cc1 -no-opaque-pointers -triple i386-unknown-unknown %s -emit-llvm -fno-delete-null-pointer-checks -o - | FileCheck %s -check-prefixes=CHECK,NULL-VALID +// RUN: %clang_cc1 -no-opaque-pointers -Wno-int-conversion -triple i386-unknown-unknown %s -emit-llvm -o - | FileCheck %s -check-prefixes=CHECK,NULL-INVALID +// RUN: %clang_cc1 -no-opaque-pointers -Wno-int-conversion -triple i386-unknown-unknown %s -emit-llvm -fno-delete-null-pointer-checks -o - | FileCheck %s -check-prefixes=CHECK,NULL-VALID int b(char* x); @@ -70,7 +70,7 @@ int bork[4][13][15]; // CHECK: call void @function1(i16 noundef signext 1, i32* noundef {{.*}}) function1(1, bork); - // CHECK: call void @function(i16 noundef signext 1, i32* noundef {{.*}}) + // CHECK: call void @function(i16 noundef signext 1, i32* noundef {{.*}}) function(1, bork[2]); } diff --git a/clang/test/CodeGenObjC/block-ptr-type-crash.m b/clang/test/CodeGenObjC/block-ptr-type-crash.m --- a/clang/test/CodeGenObjC/block-ptr-type-crash.m +++ b/clang/test/CodeGenObjC/block-ptr-type-crash.m @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -Wno-objc-root-class -fblocks -o /dev/null -triple x86_64-- -emit-llvm %s +// RUN: %clang_cc1 -Wno-objc-root-class -Wno-int-conversion -fblocks -o /dev/null -triple x86_64-- -emit-llvm %s // REQUIRES: asserts // Verify there is no assertion. diff --git a/clang/test/CodeGenOpenCL/builtins-generic-amdgcn.cl b/clang/test/CodeGenOpenCL/builtins-generic-amdgcn.cl --- a/clang/test/CodeGenOpenCL/builtins-generic-amdgcn.cl +++ b/clang/test/CodeGenOpenCL/builtins-generic-amdgcn.cl @@ -1,5 +1,5 @@ // REQUIRES: amdgpu-registered-target -// RUN: %clang_cc1 -no-opaque-pointers -triple amdgcn-unknown-unknown -S -emit-llvm -o - %s | FileCheck %s +// RUN: %clang_cc1 -no-opaque-pointers -Wno-error=int-conversion -triple amdgcn-unknown-unknown -S -emit-llvm -o - %s | FileCheck %s // CHECK-LABEL: @test_builtin_clz( // CHECK: tail call i32 @llvm.ctlz.i32(i32 %a, i1 true) diff --git a/clang/test/FixIt/dereference-addressof.c b/clang/test/FixIt/dereference-addressof.c --- a/clang/test/FixIt/dereference-addressof.c +++ b/clang/test/FixIt/dereference-addressof.c @@ -11,12 +11,12 @@ void f2(int *aPtr, int a, float *bPtr, char c) { float fl = 0; - ip(a); // expected-warning{{incompatible integer to pointer conversion passing 'int' to parameter of type 'int *'; take the address with &}} - i(aPtr); // expected-warning{{incompatible pointer to integer conversion passing 'int *' to parameter of type 'int'; dereference with *}} - ii(&a); // expected-warning{{incompatible pointer to integer conversion passing 'int *' to parameter of type 'int'; remove &}} + ip(a); // expected-error{{incompatible integer to pointer conversion passing 'int' to parameter of type 'int *'; take the address with &}} + i(aPtr); // expected-error{{incompatible pointer to integer conversion passing 'int *' to parameter of type 'int'; dereference with *}} + ii(&a); // expected-error{{incompatible pointer to integer conversion passing 'int *' to parameter of type 'int'; remove &}} fp(*bPtr); // expected-error{{passing 'float' to parameter of incompatible type 'float *'; remove *}} f(bPtr); // expected-error{{passing 'float *' to parameter of incompatible type 'float'; dereference with *}} - a = aPtr; // expected-warning{{incompatible pointer to integer conversion assigning to 'int' from 'int *'; dereference with *}} + a = aPtr; // expected-error{{incompatible pointer to integer conversion assigning to 'int' from 'int *'; dereference with *}} fl = bPtr + a; // expected-error{{assigning to 'float' from incompatible type 'float *'; dereference with *}} bPtr = bPtr[a]; // expected-error{{assigning to 'float *' from incompatible type 'float'; take the address with &}} } diff --git a/clang/test/FixIt/selector-fixit.m b/clang/test/FixIt/selector-fixit.m --- a/clang/test/FixIt/selector-fixit.m +++ b/clang/test/FixIt/selector-fixit.m @@ -1,6 +1,6 @@ // RUN: cp %s %t -// RUN: %clang_cc1 -x objective-c -Wundeclared-selector -fixit %t -// RUN: %clang_cc1 -x objective-c -Wundeclared-selector -Werror %t +// RUN: %clang_cc1 -x objective-c -Wundeclared-selector -Wno-int-conversion -fixit %t +// RUN: %clang_cc1 -x objective-c -Wundeclared-selector -Wno-int-conversion -Werror %t // rdar://14039037 @interface NSObject @end diff --git a/clang/test/Misc/serialized-diags.c b/clang/test/Misc/serialized-diags.c --- a/clang/test/Misc/serialized-diags.c +++ b/clang/test/Misc/serialized-diags.c @@ -57,7 +57,7 @@ // CHECK: +-{{.*[/\\]}}serialized-diags.c:20:15: note: expanded from macro 'false' [] // CHECK: +-Range: {{.*[/\\]}}serialized-diags.c:20:15 {{.*[/\\]}}serialized-diags.c:20:16 // CHECK: +-{{.*[/\\]}}serialized-diags.c:19:6: note: 'taz' declared here [] -// CHECK: {{.*[/\\]}}serialized-diags.h:5:7: warning: incompatible integer to pointer conversion initializing 'char *' with an expression of type 'int' [-Wint-conversion] +// CHECK: {{.*[/\\]}}serialized-diags.h:5:7: error: incompatible integer to pointer conversion initializing 'char *' with an expression of type 'int' [-Wint-conversion] // CHECK: Range: {{.*[/\\]}}serialized-diags.h:5:16 {{.*[/\\]}}serialized-diags.h:5:17 // CHECK: +-{{.*[/\\]}}serialized-diags.c:26:10: note: in file included from {{.*[/\\]}}serialized-diags.c:26: [] // CHECK: Number FIXITs = 0 diff --git a/clang/test/Misc/tabstop.c b/clang/test/Misc/tabstop.c --- a/clang/test/Misc/tabstop.c +++ b/clang/test/Misc/tabstop.c @@ -1,6 +1,6 @@ -// RUN: %clang_cc1 -ftabstop 3 -fsyntax-only %s 2>&1 | FileCheck -check-prefix=CHECK-3 -strict-whitespace %s -// RUN: %clang_cc1 -ftabstop 4 -fsyntax-only %s 2>&1 | FileCheck -check-prefix=CHECK-4 -strict-whitespace %s -// RUN: %clang_cc1 -ftabstop 5 -fsyntax-only %s 2>&1 | FileCheck -check-prefix=CHECK-5 -strict-whitespace %s +// RUN: %clang_cc1 -ftabstop 3 -fsyntax-only -Wno-error=int-conversion %s 2>&1 | FileCheck -check-prefix=CHECK-3 -strict-whitespace %s +// RUN: %clang_cc1 -ftabstop 4 -fsyntax-only -Wno-error=int-conversion %s 2>&1 | FileCheck -check-prefix=CHECK-4 -strict-whitespace %s +// RUN: %clang_cc1 -ftabstop 5 -fsyntax-only -Wno-error=int-conversion %s 2>&1 | FileCheck -check-prefix=CHECK-5 -strict-whitespace %s // tab void* a = 1; diff --git a/clang/test/Modules/config_macros.m b/clang/test/Modules/config_macros.m --- a/clang/test/Modules/config_macros.m +++ b/clang/test/Modules/config_macros.m @@ -6,7 +6,7 @@ char *test_bar(void) { return bar(); // expected-error{{call to undeclared function 'bar'; ISO C99 and later do not support implicit function declarations}} \ - // expected-warning{{incompatible integer to pointer conversion}} + // expected-error{{incompatible integer to pointer conversion}} } #undef WANT_FOO // expected-note{{macro was #undef'd here}} diff --git a/clang/test/PCH/objc_exprs.m b/clang/test/PCH/objc_exprs.m --- a/clang/test/PCH/objc_exprs.m +++ b/clang/test/PCH/objc_exprs.m @@ -9,7 +9,7 @@ int *A1 = (objc_string)0; // expected-warning {{aka 'NSString *'}} char A2 = (objc_encode){}; // expected-error {{not a compile-time constant}} \ - expected-warning {{char[2]}} + expected-error {{char[2]}} int *A3 = (objc_protocol)0; // expected-warning {{aka 'Protocol *'}} diff --git a/clang/test/Parser/implicit-casts.c b/clang/test/Parser/implicit-casts.c --- a/clang/test/Parser/implicit-casts.c +++ b/clang/test/Parser/implicit-casts.c @@ -14,7 +14,7 @@ } int test3(void) { int a[2]; - a[0] = test3; // expected-warning{{incompatible pointer to integer conversion assigning to 'int' from 'int (void)'}} + a[0] = test3; // expected-error{{incompatible pointer to integer conversion assigning to 'int' from 'int (void)'}} return 0; } short x; void test4(char c) { x += c; } diff --git a/clang/test/Sema/array-init.c b/clang/test/Sema/array-init.c --- a/clang/test/Sema/array-init.c +++ b/clang/test/Sema/array-init.c @@ -11,7 +11,7 @@ extern int fileScopeExtern[3] = { 1, 3, 5 }; // expected-warning{{'extern' variable has an initializer}} -static long ary3[] = { 1, "abc", 3, 4 }; // expected-warning{{incompatible pointer to integer conversion initializing 'long' with an expression of type 'char[4]'}} +static long ary3[] = { 1, "abc", 3, 4 }; // expected-error{{incompatible pointer to integer conversion initializing 'long' with an expression of type 'char[4]'}} void func(void) { int x = 1; @@ -24,7 +24,7 @@ int x4 = { 1, 2 }; // expected-warning{{excess elements in scalar initializer}} - int y[4][3] = { + int y[4][3] = { { 1, 3, 5 }, { 2, 4, 6 }, { 3, 5, 7 }, @@ -34,7 +34,7 @@ 1, 3, 5, 2, 4, 6, 3, 5, 7 }; - int y3[4][3] = { + int y3[4][3] = { { 1, 3, 5 }, { 2, 4, 6 }, { 3, 5, 7 }, @@ -46,27 +46,27 @@ int a,b,c; } z = { 1 }; - struct threeElements *p = 7; // expected-warning{{incompatible integer to pointer conversion initializing 'struct threeElements *' with an expression of type 'int'}} - + struct threeElements *p = 7; // expected-error{{incompatible integer to pointer conversion initializing 'struct threeElements *' with an expression of type 'int'}} + extern int blockScopeExtern[3] = { 1, 3, 5 }; // expected-error{{'extern' variable cannot have an initializer}} - + static long x2[3] = { 1.0, - "abc", // expected-warning{{incompatible pointer to integer conversion initializing 'long' with an expression of type 'char[4]'}} + "abc", // expected-error{{incompatible pointer to integer conversion initializing 'long' with an expression of type 'char[4]'}} 5.8 }; // expected-warning {{implicit conversion from 'double' to 'long' changes value from 5.8 to 5}} } void test(void) { - int y1[3] = { + int y1[3] = { { 1, 2, 3 } // expected-warning{{excess elements in scalar initializer}} }; - int y3[4][3] = { + int y3[4][3] = { { 1, 3, 5 }, { 2, 4, 6 }, { 3, 5, 7 }, { 4, 6, 8 }, { }, // expected-warning{{use of GNU empty initializer extension}} expected-warning{{excess elements in array initializer}} }; - int y4[4][3] = { + int y4[4][3] = { { 1, 3, 5, 2 }, // expected-warning{{excess elements in array initializer}} { 4, 6 }, { 3, 5, 7 }, @@ -86,13 +86,13 @@ { 4, 5, 6 } }; short q3[4][3][2] = { - { + { { 1 }, }, - { + { { 2, 3 }, }, - { + { { 4, 5 }, { 6 }, }, @@ -109,8 +109,8 @@ } unsigned char asso_values[] = { 34 }; -int legal2(void) { - return asso_values[0]; +int legal2(void) { + return asso_values[0]; } void illegal(void) { @@ -120,13 +120,13 @@ { 4, 5, 6 } }; short q3[4][3][] = { // expected-error{{array has incomplete element type 'short[]'}} - { + { { 1 }, }, - { + { { 2, 3 }, }, - { + { { 4, 5 }, { 6 }, }, @@ -167,11 +167,11 @@ char c[] = { "Hello" }; int l[sizeof(c) == 6 ? 1 : -1]; - - int i[] = { "Hello "}; // expected-warning{{incompatible pointer to integer conversion initializing 'int' with an expression of type 'char[7]'}} + + int i[] = { "Hello "}; // expected-error{{incompatible pointer to integer conversion initializing 'int' with an expression of type 'char[7]'}} char c2[] = { "Hello", "Good bye" }; //expected-warning{{excess elements in char array initializer}} - int i2[1] = { "Hello" }; //expected-warning{{incompatible pointer to integer conversion initializing 'int' with an expression of type 'char[6]'}} + int i2[1] = { "Hello" }; //expected-error{{incompatible pointer to integer conversion initializing 'int' with an expression of type 'char[6]'}} char c3[5] = { "Hello" }; char c4[4] = { "Hello" }; //expected-warning{{initializer-string for char array is too long}} @@ -204,14 +204,14 @@ struct s1 {char a; char b;} t1; struct s2 {struct s1 c;} t2 = { t1 }; // The following is a less than great diagnostic (though it's on par with EDG). -struct s1 t3[] = {t1, t1, "abc", 0}; //expected-warning{{incompatible pointer to integer conversion initializing 'char' with an expression of type 'char[4]'}} +struct s1 t3[] = {t1, t1, "abc", 0}; //expected-error{{incompatible pointer to integer conversion initializing 'char' with an expression of type 'char[4]'}} int t4[sizeof t3 == 6 ? 1 : -1]; } struct foo { int z; } w; -int bar (void) { +int bar (void) { struct foo z = { w }; //expected-error{{initializing 'int' with an expression of incompatible type 'struct foo'}} - return z.z; -} + return z.z; +} struct s3 {void (*a)(void);} t5 = {autoStructTest}; struct {int a; int b[];} t6 = {1, {1, 2, 3}}; // expected-warning{{flexible array initialization is a GNU extension}} \ // expected-note{{initialized flexible array member 'b' is here}} @@ -273,7 +273,7 @@ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, - 13.0f, 14.0f, 15.0f, 16.0f + 13.0f, 14.0f, 15.0f, 16.0f }; } diff --git a/clang/test/Sema/atomic-ops.c b/clang/test/Sema/atomic-ops.c --- a/clang/test/Sema/atomic-ops.c +++ b/clang/test/Sema/atomic-ops.c @@ -160,16 +160,16 @@ __atomic_load(CI, CI, memory_order_relaxed); // expected-warning {{passing 'const int *' to parameter of type 'int *' discards qualifiers}} __c11_atomic_store(i, 1, memory_order_seq_cst); - __c11_atomic_store(p, 1, memory_order_seq_cst); // expected-warning {{incompatible integer to pointer conversion}} + __c11_atomic_store(p, 1, memory_order_seq_cst); // expected-error {{incompatible integer to pointer conversion}} (int)__c11_atomic_store(f, 1, memory_order_seq_cst); // expected-error {{operand of type 'void'}} __atomic_store_n(I, 4, memory_order_release); __atomic_store_n(I, 4.0, memory_order_release); __atomic_store_n(CI, 4, memory_order_release); // expected-error {{address argument to atomic operation must be a pointer to non-const type ('const int *' invalid)}} - __atomic_store_n(I, P, memory_order_release); // expected-warning {{parameter of type 'int'}} + __atomic_store_n(I, P, memory_order_release); // expected-error {{parameter of type 'int'}} __atomic_store_n(i, 1, memory_order_release); // expected-error {{must be a pointer to integer or pointer}} __atomic_store_n(s1, *s2, memory_order_release); // expected-error {{must be a pointer to integer or pointer}} - __atomic_store_n(I, I, memory_order_release); // expected-warning {{incompatible pointer to integer conversion passing 'int *' to parameter of type 'int'; dereference with *}} + __atomic_store_n(I, I, memory_order_release); // expected-error {{incompatible pointer to integer conversion passing 'int *' to parameter of type 'int'; dereference with *}} __atomic_store(I, *P, memory_order_release); __atomic_store(CI, I, memory_order_release); // expected-error {{address argument to atomic operation must be a pointer to non-const type ('const int *' invalid)}} @@ -225,11 +225,11 @@ _Bool cmpexch_4 = __atomic_compare_exchange_n(I, I, 5, 1, memory_order_seq_cst, memory_order_seq_cst); _Bool cmpexch_5 = __atomic_compare_exchange_n(I, P, 5, 0, memory_order_seq_cst, memory_order_seq_cst); // expected-warning {{; dereference with *}} - _Bool cmpexch_6 = __atomic_compare_exchange_n(I, I, P, 0, memory_order_seq_cst, memory_order_seq_cst); // expected-warning {{passing 'int **' to parameter of type 'int'}} + _Bool cmpexch_6 = __atomic_compare_exchange_n(I, I, P, 0, memory_order_seq_cst, memory_order_seq_cst); // expected-error {{passing 'int **' to parameter of type 'int'}} (void)__atomic_compare_exchange_n(CI, I, 5, 1, memory_order_seq_cst, memory_order_seq_cst); // expected-error {{address argument to atomic operation must be a pointer to non-const type ('const int *' invalid)}} (void)__atomic_compare_exchange_n(I, CI, 5, 1, memory_order_seq_cst, memory_order_seq_cst); // expected-warning {{passing 'const int *' to parameter of type 'int *' discards qualifiers}} - _Bool cmpexch_7 = __atomic_compare_exchange(I, I, 5, 1, memory_order_seq_cst, memory_order_seq_cst); // expected-warning {{passing 'int' to parameter of type 'int *'}} + _Bool cmpexch_7 = __atomic_compare_exchange(I, I, 5, 1, memory_order_seq_cst, memory_order_seq_cst); // expected-error {{passing 'int' to parameter of type 'int *'}} _Bool cmpexch_8 = __atomic_compare_exchange(I, P, I, 0, memory_order_seq_cst, memory_order_seq_cst); // expected-warning {{; dereference with *}} _Bool cmpexch_9 = __atomic_compare_exchange(I, I, I, 0, memory_order_seq_cst, memory_order_seq_cst); (void)__atomic_compare_exchange(CI, I, I, 0, memory_order_seq_cst, memory_order_seq_cst); // expected-error {{address argument to atomic operation must be a pointer to non-const type ('const int *' invalid)}} @@ -253,7 +253,7 @@ // Ensure the macros behave appropriately. atomic_int n = ATOMIC_VAR_INIT(123); atomic_init(&n, 456); - atomic_init(&n, (void*)0); // expected-warning {{passing 'void *' to parameter of type 'int'}} + atomic_init(&n, (void*)0); // expected-error {{passing 'void *' to parameter of type 'int'}} const atomic_wchar_t cawt; atomic_init(&cawt, L'x'); // expected-error {{non-const}} @@ -275,7 +275,7 @@ k = atomic_exchange(&n, 72); k = atomic_exchange_explicit(&n, k, memory_order_release); - atomic_compare_exchange_strong(&n, k, k); // expected-warning {{take the address with &}} + atomic_compare_exchange_strong(&n, k, k); // expected-error {{take the address with &}} atomic_compare_exchange_weak(&n, &k, k); atomic_compare_exchange_strong_explicit(&n, &k, k, memory_order_seq_cst); // expected-error {{too few arguments}} atomic_compare_exchange_weak_explicit(&n, &k, k, memory_order_seq_cst, memory_order_acquire); diff --git a/clang/test/Sema/block-return.c b/clang/test/Sema/block-return.c --- a/clang/test/Sema/block-return.c +++ b/clang/test/Sema/block-return.c @@ -98,7 +98,7 @@ } int (*funcptr3[5])(long); -int sz8 = sizeof(^int (*[5])(long) {return funcptr3;}); // expected-error {{block cannot return array type}} expected-warning {{incompatible pointer to integer conversion}} +int sz8 = sizeof(^int (*[5])(long) {return funcptr3;}); // expected-error {{block cannot return array type}} expected-error {{incompatible pointer to integer conversion}} int sz9 = sizeof(^int(*())()[3]{ }); // expected-error {{function cannot return array type}} // expected-warning@-1 {{a function declaration without a prototype is deprecated in all versions of C}} diff --git a/clang/test/Sema/builtin-alloca-with-align.c b/clang/test/Sema/builtin-alloca-with-align.c --- a/clang/test/Sema/builtin-alloca-with-align.c +++ b/clang/test/Sema/builtin-alloca-with-align.c @@ -9,7 +9,7 @@ } void test3(unsigned *b) { - __builtin_alloca_with_align(b, 32); // expected-warning {{incompatible pointer to integer conversion passing 'unsigned int *' to parameter of type}} + __builtin_alloca_with_align(b, 32); // expected-error {{incompatible pointer to integer conversion passing 'unsigned int *' to parameter of type}} } void test4(int a) { diff --git a/clang/test/Sema/builtin-assume-aligned.c b/clang/test/Sema/builtin-assume-aligned.c --- a/clang/test/Sema/builtin-assume-aligned.c +++ b/clang/test/Sema/builtin-assume-aligned.c @@ -25,7 +25,7 @@ } int test5(int *a, unsigned *b) { - a = __builtin_assume_aligned(a, 32, b); // expected-warning {{incompatible pointer to integer conversion passing 'unsigned int *' to parameter of type}} + a = __builtin_assume_aligned(a, 32, b); // expected-error {{incompatible pointer to integer conversion passing 'unsigned int *' to parameter of type}} return a[0]; } diff --git a/clang/test/Sema/builtin-dump-struct.c b/clang/test/Sema/builtin-dump-struct.c --- a/clang/test/Sema/builtin-dump-struct.c +++ b/clang/test/Sema/builtin-dump-struct.c @@ -16,7 +16,7 @@ __builtin_dump_struct(&a, 2); // expected-error {{expected a callable expression as 2nd argument to '__builtin_dump_struct', found 'int'}} __builtin_dump_struct(b, goodfunc); // expected-error {{expected pointer to struct as 1st argument to '__builtin_dump_struct', found 'void *'}} __builtin_dump_struct(&a, badfunc1); // expected-error {{too many arguments to function call, expected 1, have 2}} expected-note {{in call to printing function with arguments '("%s", "struct A")'}} - __builtin_dump_struct(&a, badfunc2); // expected-warning-re 1+{{incompatible pointer to integer conversion passing 'char[{{.*}}]' to parameter of type 'int'}} + __builtin_dump_struct(&a, badfunc2); // expected-error-re 1+{{incompatible pointer to integer conversion passing 'char[{{.*}}]' to parameter of type 'int'}} // expected-note@-1 1+{{in call to printing function with arguments '("}} __builtin_dump_struct(&a, badfunc3); // expected-error {{too many arguments to function call, expected 0, have 2}} expected-note {{in call to printing function with arguments '("%s", "struct A")'}} __builtin_dump_struct(a, goodfunc); // expected-error {{expected pointer to struct as 1st argument to '__builtin_dump_struct', found 'struct A'}} diff --git a/clang/test/Sema/builtins-bpf.c b/clang/test/Sema/builtins-bpf.c --- a/clang/test/Sema/builtins-bpf.c +++ b/clang/test/Sema/builtins-bpf.c @@ -33,7 +33,7 @@ } void *invalid3(struct s *arg) { - return __builtin_preserve_field_info(arg->a, 1); // expected-warning {{incompatible integer to pointer conversion returning 'unsigned int' from a function with result type 'void *'}} + return __builtin_preserve_field_info(arg->a, 1); // expected-error {{incompatible integer to pointer conversion returning 'unsigned int' from a function with result type 'void *'}} } unsigned valid4(struct s *arg) { diff --git a/clang/test/Sema/builtins.c b/clang/test/Sema/builtins.c --- a/clang/test/Sema/builtins.c +++ b/clang/test/Sema/builtins.c @@ -28,7 +28,7 @@ const void *X; X = CFSTR("\242"); // expected-warning {{input conversion stopped}} X = CFSTR("\0"); // no-warning - X = CFSTR(242); // expected-error {{CFString literal is not a string constant}} expected-warning {{incompatible integer to pointer conversion}} + X = CFSTR(242); // expected-error {{CFString literal is not a string constant}} expected-error {{incompatible integer to pointer conversion}} X = CFSTR("foo", "bar"); // expected-error {{too many arguments to function call}} } @@ -201,8 +201,8 @@ result = __builtin___strlcat_chk(dst, src, sizeof(dst), sizeof(dst)); ptr = __builtin___memccpy_chk(dst, src, '\037', sizeof(src)); // expected-error {{too few arguments to function call}} - ptr = __builtin___strlcpy_chk(dst, src, sizeof(dst), sizeof(dst)); // expected-warning {{incompatible integer to pointer conversion}} - ptr = __builtin___strlcat_chk(dst, src, sizeof(dst), sizeof(dst)); // expected-warning {{incompatible integer to pointer conversion}} + ptr = __builtin___strlcpy_chk(dst, src, sizeof(dst), sizeof(dst)); // expected-error {{incompatible integer to pointer conversion}} + ptr = __builtin___strlcat_chk(dst, src, sizeof(dst), sizeof(dst)); // expected-error {{incompatible integer to pointer conversion}} } void no_ms_builtins(void) { diff --git a/clang/test/Sema/compound-literal.c b/clang/test/Sema/compound-literal.c --- a/clang/test/Sema/compound-literal.c +++ b/clang/test/Sema/compound-literal.c @@ -11,7 +11,7 @@ static int x = (int){1}; static int *p2 = (int []){2,x}; // expected-error {{initializer element is not a compile-time constant}} -static long *p3 = (long []){2,"x"}; // expected-warning {{incompatible pointer to integer conversion initializing 'long' with an expression of type 'char[2]'}} +static long *p3 = (long []){2,"x"}; // expected-error {{incompatible pointer to integer conversion initializing 'long' with an expression of type 'char[2]'}} typedef struct { } cache_t; // expected-warning{{empty struct is a GNU extension}} static cache_t clo_I1_cache = ((cache_t) { } ); // expected-warning{{use of GNU empty initializer extension}} diff --git a/clang/test/Sema/conditional-expr.c b/clang/test/Sema/conditional-expr.c --- a/clang/test/Sema/conditional-expr.c +++ b/clang/test/Sema/conditional-expr.c @@ -90,7 +90,7 @@ int f0(int a) { // GCC considers this a warning. - return a ? f1() : nil; // expected-warning {{pointer/integer type mismatch in conditional expression ('int' and 'void *')}} expected-warning {{incompatible pointer to integer conversion returning 'void *' from a function with result type 'int'}} + return a ? f1() : nil; // expected-warning {{pointer/integer type mismatch in conditional expression ('int' and 'void *')}} expected-error {{incompatible pointer to integer conversion returning 'void *' from a function with result type 'int'}} } int f2(int x) { diff --git a/clang/test/Sema/enum.c b/clang/test/Sema/enum.c --- a/clang/test/Sema/enum.c +++ b/clang/test/Sema/enum.c @@ -1,5 +1,5 @@ // RUN: %clang_cc1 -triple %itanium_abi_triple %s -fsyntax-only -verify -pedantic -enum e {A, +enum e {A, B = 42LL << 32, // expected-warning {{ISO C restricts enumerator values to range of 'int'}} C = -4, D = 12456 }; @@ -11,7 +11,7 @@ enum h { e = -2147483648, // too pos f = 2147483648, // expected-warning {{ISO C restricts enumerator values to range of 'int'}} i = 0xFFFF0000 // expected-warning {{too large}} -}; +}; // minll maxull enum x // expected-warning {{enumeration values exceed range of largest integer}} @@ -91,7 +91,7 @@ typedef enum { an_enumerator = 20 } an_enum; -char * s = (an_enum) an_enumerator; // expected-warning {{incompatible integer to pointer conversion initializing 'char *' with an expression of type 'an_enum'}} +char * s = (an_enum) an_enumerator; // expected-error {{incompatible integer to pointer conversion initializing 'char *' with an expression of type 'an_enum'}} // PR4515 enum PR4515 {PR4515a=1u,PR4515b=(PR4515a-2)/2}; diff --git a/clang/test/Sema/extern-redecl.c b/clang/test/Sema/extern-redecl.c --- a/clang/test/Sema/extern-redecl.c +++ b/clang/test/Sema/extern-redecl.c @@ -14,10 +14,10 @@ int *PR10013_x = 0; { extern int PR10013_x; - extern int PR10013_x; + extern int PR10013_x; } - - return PR10013_x; // expected-warning{{incompatible pointer to integer conversion}} + + return PR10013_x; // expected-error{{incompatible pointer to integer conversion}} } static int test1_a[]; // expected-warning {{tentative array definition assumed to have one element}} diff --git a/clang/test/Sema/format-strings.c b/clang/test/Sema/format-strings.c --- a/clang/test/Sema/format-strings.c +++ b/clang/test/Sema/format-strings.c @@ -64,11 +64,11 @@ printf("abc\ def" "%*d", 1, 1); // no-warning - + // , allow 'unsigned' (instead of 'int') to be used for both // the field width and precision. This deviates from C99, but is reasonably safe // and is also accepted by GCC. - printf("%*d", (unsigned) 1, 1); // no-warning + printf("%*d", (unsigned) 1, 1); // no-warning } // When calling a non-variadic format function (vprintf, vscanf, NSLogv, ...), @@ -218,7 +218,7 @@ va_start(ap,buf); vprintf("",ap); // expected-warning {{format string is empty}} sprintf(buf, "", 1); // expected-warning {{format string is empty}} - + // Don't warn about empty format strings when there are no data arguments. // This can arise from macro expansions and non-standard format string // functions. @@ -254,7 +254,7 @@ const char *s3 = "hello"; char * const s4 = "hello"; extern const char s5[]; - + printf(s1); // no-warning printf(s2); // no-warning printf(s3); // expected-warning{{not a string literal}} @@ -279,7 +279,7 @@ void torture(va_list v8) { vprintf ("%*.*d", v8); // no-warning - + } void test10(int x, float f, int i, long long lli) { @@ -344,7 +344,7 @@ unsigned char buf[4]; printf ("%.4s\n", buf); // no-warning printf ("%.4s\n", &buf); // expected-warning{{format specifies type 'char *' but the argument has type 'unsigned char (*)[4]'}} - + // Verify that we are checking asprintf asprintf(&b, "%d", "asprintf"); // expected-warning{{format specifies type 'int' but the argument has type 'char *'}} } @@ -490,7 +490,7 @@ extern void rdar8332221_vprintf_scanf(const char *, va_list, const char *, ...) __attribute__((__format__(__printf__, 1, 0))) __attribute__((__format__(__scanf__, 3, 4))); - + void rdar8332221(va_list ap, int *x, long *y) { rdar8332221_vprintf_scanf("%", ap, "%d", x); // expected-warning{{incomplete format specifier}} } @@ -790,7 +790,7 @@ void PR30481(void) { // This caused crashes due to invalid casts. - printf(1 > 0); // expected-warning{{format string is not a string literal}} expected-warning{{incompatible integer to pointer conversion}} expected-note@format-strings.c:*{{passing argument to parameter here}} expected-note{{to avoid this}} + printf(1 > 0); // expected-warning{{format string is not a string literal}} expected-error{{incompatible integer to pointer conversion}} expected-note@format-strings.c:*{{passing argument to parameter here}} expected-note{{to avoid this}} } void test_printf_opaque_ptr(void *op) { diff --git a/clang/test/Sema/function-redecl.c b/clang/test/Sema/function-redecl.c --- a/clang/test/Sema/function-redecl.c +++ b/clang/test/Sema/function-redecl.c @@ -96,7 +96,7 @@ // GNU extension: prototypes and K&R function definitions int isroot(short x, // expected-note{{previous declaration is here}} - enum e); + enum e); int isroot(x, y) short x; // expected-warning{{promoted type 'int' of K&R function parameter is not compatible with the parameter type 'short' declared in a previous prototype}} @@ -121,11 +121,11 @@ a2 x2; // expected-note{{passing argument to parameter here}} void test_x(void) { x(5); - x2(5); // expected-warning{{incompatible integer to pointer conversion passing 'int' to parameter of type 'int *'}} + x2(5); // expected-error{{incompatible integer to pointer conversion passing 'int' to parameter of type 'int *'}} } -enum e0 {one}; -void f3(); +enum e0 {one}; +void f3(); void f3(enum e0 x) {} enum incomplete_enum; diff --git a/clang/test/Sema/function.c b/clang/test/Sema/function.c --- a/clang/test/Sema/function.c +++ b/clang/test/Sema/function.c @@ -1,7 +1,7 @@ // RUN: %clang_cc1 %s -fsyntax-only -verify -verify=c2x -pedantic -Wno-strict-prototypes // PR1892, PR11354 -void f(double a[restrict][5]) { __typeof(a) x = 10; } // expected-warning {{(aka 'double (*restrict)[5]')}} +void f(double a[restrict][5]) { __typeof(a) x = 10; } // expected-error {{(aka 'double (*restrict)[5]')}} int foo (__const char *__path); int foo(__const char *__restrict __file); diff --git a/clang/test/Sema/i-c-e.c b/clang/test/Sema/i-c-e.c --- a/clang/test/Sema/i-c-e.c +++ b/clang/test/Sema/i-c-e.c @@ -92,7 +92,7 @@ int realop[(__real__ 4) == 4 ? 1 : -1]; int imagop[(__imag__ 4) == 0 ? 1 : -1]; -int *PR14729 = 0 ?: 1/0; // expected-error {{not a compile-time constant}} expected-warning 3{{}} +int *PR14729 = 0 ?: 1/0; // expected-error {{not a compile-time constant}} expected-warning 2{{}} expected-error {{incompatible integer to pointer conversion initializing 'int *' with an expression of type 'int'}} int bcp_call_v; int bcp_call_a[] = {__builtin_constant_p(bcp_call_v && 0) ? bcp_call_v && 0 : -1}; diff --git a/clang/test/Sema/indirect-goto.c b/clang/test/Sema/indirect-goto.c --- a/clang/test/Sema/indirect-goto.c +++ b/clang/test/Sema/indirect-goto.c @@ -6,6 +6,6 @@ goto *l1_ptr; l1: goto *x; // expected-error{{incompatible type}} - goto *y; // expected-warning{{incompatible integer to pointer conversion}} + goto *y; // expected-error{{incompatible integer to pointer conversion}} } diff --git a/clang/test/Sema/matrix-type-builtins.c b/clang/test/Sema/matrix-type-builtins.c --- a/clang/test/Sema/matrix-type-builtins.c +++ b/clang/test/Sema/matrix-type-builtins.c @@ -73,13 +73,13 @@ 10, // expected-error {{1st argument must be a pointer to a valid matrix element type}} 1ull << 21, // expected-error {{row dimension is outside the allowed range [1, 1048575]}} 1ull << 21, // expected-error {{column dimension is outside the allowed range [1, 1048575]}} - ""); // expected-warning {{incompatible pointer to integer conversion casting 'char[1]' to type 'unsigned long'}} + ""); // expected-error {{incompatible pointer to integer conversion casting 'char[1]' to type 'unsigned long'}} sx5x10_t a13 = __builtin_matrix_column_major_load( 10, // expected-error {{1st argument must be a pointer to a valid matrix element type}} *p4, // expected-error {{casting 'struct Foo' to incompatible type 'unsigned long'}} "", // expected-error {{column argument must be a constant unsigned integer expression}} - // expected-warning@-1 {{incompatible pointer to integer conversion casting 'char[1]' to type 'unsigned long'}} + // expected-error@-1 {{incompatible pointer to integer conversion casting 'char[1]' to type 'unsigned long'}} 10); } diff --git a/clang/test/Sema/nullability.c b/clang/test/Sema/nullability.c --- a/clang/test/Sema/nullability.c +++ b/clang/test/Sema/nullability.c @@ -211,7 +211,7 @@ int vla[_Nonnull GLOBAL_LENGTH], void ** _Nullable reference); void testDecayedType(void) { - int produceAnErrorMessage = arrays; // expected-warning {{incompatible pointer to integer conversion initializing 'int' with an expression of type 'void (int * _Nonnull, void ** _Nullable, void *** _Nullable, void * _Null_unspecified * _Nonnull * _Nullable, int * _Nonnull, int * _Nonnull, int * _Nonnull, int * _Nonnull, int * _Nonnull, void ** _Nullable)'}} + int produceAnErrorMessage = arrays; // expected-error {{incompatible pointer to integer conversion initializing 'int' with an expression of type 'void (int * _Nonnull, void ** _Nullable, void *** _Nullable, void * _Null_unspecified * _Nonnull * _Nullable, int * _Nonnull, int * _Nonnull, int * _Nonnull, int * _Nonnull, int * _Nonnull, void ** _Nullable)'}} } int notInFunction[_Nullable 3]; // expected-error {{nullability specifier '_Nullable' cannot be applied to non-pointer type 'int[3]'}} diff --git a/clang/test/SemaObjC/argument-checking.m b/clang/test/SemaObjC/argument-checking.m --- a/clang/test/SemaObjC/argument-checking.m +++ b/clang/test/SemaObjC/argument-checking.m @@ -17,10 +17,10 @@ id obj = [Test alloc]; struct S sInst; - charStarFunc(1); // expected-warning {{incompatible integer to pointer conversion passing 'int' to parameter of type 'char *'}} - charFunc("abc"); // expected-warning {{incompatible pointer to integer conversion passing 'char[4]' to parameter of type 'char'}} + charStarFunc(1); // expected-error {{incompatible integer to pointer conversion passing 'int' to parameter of type 'char *'}} + charFunc("abc"); // expected-error {{incompatible pointer to integer conversion passing 'char[4]' to parameter of type 'char'}} - [obj charStarMeth:1]; // expected-warning {{incompatible integer to pointer conversion sending 'int'}} + [obj charStarMeth:1]; // expected-error {{incompatible integer to pointer conversion sending 'int'}} [obj structMeth:1]; // expected-error {{sending 'int'}} [obj structMeth:sInst :1]; // expected-error {{sending 'int'}} } diff --git a/clang/test/SemaObjC/comptypes-7.m b/clang/test/SemaObjC/comptypes-7.m --- a/clang/test/SemaObjC/comptypes-7.m +++ b/clang/test/SemaObjC/comptypes-7.m @@ -21,24 +21,25 @@ int i = 0; int *j = nil; - /* These should all generate warnings. */ + /* The incompatible pointer types should all generate warnings, while the + incompatible integer to/from pointer conversions default to an error. */ - obj = i; // expected-warning {{incompatible integer to pointer conversion assigning to 'id' from 'int'}} + obj = i; // expected-error {{incompatible integer to pointer conversion assigning to 'id' from 'int'}} obj = j; // expected-warning {{incompatible pointer types assigning to 'id' from 'int *'}} - obj_p = i; // expected-warning {{incompatible integer to pointer conversion assigning to 'id' from 'int'}} + obj_p = i; // expected-error {{incompatible integer to pointer conversion assigning to 'id' from 'int'}} obj_p = j; // expected-warning {{incompatible pointer types assigning to 'id' from 'int *'}} - obj_c = i; // expected-warning {{incompatible integer to pointer conversion assigning to 'MyClass *' from 'int'}} + obj_c = i; // expected-error {{incompatible integer to pointer conversion assigning to 'MyClass *' from 'int'}} obj_c = j; // expected-warning {{incompatible pointer types assigning to 'MyClass *' from 'int *'}} - obj_C = i; // expected-warning {{incompatible integer to pointer conversion assigning to 'Class' from 'int'}} + obj_C = i; // expected-error {{incompatible integer to pointer conversion assigning to 'Class' from 'int'}} obj_C = j; // expected-warning {{incompatible pointer types assigning to 'Class' from 'int *'}} - i = obj; // expected-warning {{incompatible pointer to integer conversion assigning to 'int' from 'id'}} - i = obj_p; // expected-warning {{incompatible pointer to integer conversion assigning to 'int' from 'id'}} - i = obj_c; // expected-warning {{incompatible pointer to integer conversion assigning to 'int' from 'MyClass *'}} - i = obj_C; // expected-warning {{incompatible pointer to integer conversion assigning to 'int' from 'Class'}} + i = obj; // expected-error {{incompatible pointer to integer conversion assigning to 'int' from 'id'}} + i = obj_p; // expected-error {{incompatible pointer to integer conversion assigning to 'int' from 'id'}} + i = obj_c; // expected-error {{incompatible pointer to integer conversion assigning to 'int' from 'MyClass *'}} + i = obj_C; // expected-error {{incompatible pointer to integer conversion assigning to 'int' from 'Class'}} j = obj; // expected-warning {{incompatible pointer types assigning to 'int *' from 'id'}} j = obj_p; // expected-warning {{incompatible pointer types assigning to 'int *' from 'id'}} diff --git a/clang/test/SemaObjC/ivar-lookup-resolution-builtin.m b/clang/test/SemaObjC/ivar-lookup-resolution-builtin.m --- a/clang/test/SemaObjC/ivar-lookup-resolution-builtin.m +++ b/clang/test/SemaObjC/ivar-lookup-resolution-builtin.m @@ -30,11 +30,11 @@ { return index; // expected-error {{call to undeclared library function 'index'}} \ // expected-note {{include the header or explicitly provide a declaration for 'index'}} \ - // expected-warning {{incompatible pointer to integer conversion returning}} + // expected-error {{incompatible pointer to integer conversion returning}} } + (int) ClassMethod { - return index; // expected-warning {{incompatible pointer to integer conversion returning}} + return index; // expected-error {{incompatible pointer to integer conversion returning}} } @end diff --git a/clang/test/SemaObjC/message.m b/clang/test/SemaObjC/message.m --- a/clang/test/SemaObjC/message.m +++ b/clang/test/SemaObjC/message.m @@ -87,7 +87,7 @@ int test5(int X) { int a = [X somemsg]; // expected-warning {{receiver type 'int' is not 'id'}} \ expected-warning {{method '-somemsg' not found}} \ - expected-warning {{incompatible pointer to integer conversion initializing 'int' with an expression of type 'id'}} + expected-error {{incompatible pointer to integer conversion initializing 'int' with an expression of type 'id'}} int b = [S somemsg]; // expected-error {{bad receiver type 'struct S'}} } diff --git a/clang/test/SemaObjC/method-lookup-5.m b/clang/test/SemaObjC/method-lookup-5.m --- a/clang/test/SemaObjC/method-lookup-5.m +++ b/clang/test/SemaObjC/method-lookup-5.m @@ -7,4 +7,4 @@ @end void f0(A *a) { int x = [[a foo] baz]; } // expected-warning {{method '+baz' not found (return type defaults to 'id')}} \ - // expected-warning {{ncompatible pointer to integer conversion initializing 'int' with an expression of type 'id'}} + // expected-error {{incompatible pointer to integer conversion initializing 'int' with an expression of type 'id'}} diff --git a/clang/test/SemaObjC/nullability.m b/clang/test/SemaObjC/nullability.m --- a/clang/test/SemaObjC/nullability.m +++ b/clang/test/SemaObjC/nullability.m @@ -301,5 +301,5 @@ @end void testMessageSendResultType(C0 * _Nullable c0) { - int *p = [c0 count]; // expected-warning {{incompatible integer to pointer conversion initializing 'int *' with an expression of type 'int'}} + int *p = [c0 count]; // expected-error {{incompatible integer to pointer conversion initializing 'int *' with an expression of type 'int'}} } diff --git a/clang/test/SemaObjC/objc-container-subscripting-3.m b/clang/test/SemaObjC/objc-container-subscripting-3.m --- a/clang/test/SemaObjC/objc-container-subscripting-3.m +++ b/clang/test/SemaObjC/objc-container-subscripting-3.m @@ -19,7 +19,7 @@ NSMutableDictionary *dict; id key, val; val = dict[key]; // expected-error {{method for accessing dictionary element must have Objective-C object return type instead of 'int'}} \ - // expected-warning {{incompatible integer to pointer conversion assigning to 'id' from 'int'}} + // expected-error {{incompatible integer to pointer conversion assigning to 'id' from 'int'}} dict[key] = val; // expected-error {{method object parameter type 'int' is not object type}} } diff --git a/clang/test/SemaObjC/objc-literal-fixit.m b/clang/test/SemaObjC/objc-literal-fixit.m --- a/clang/test/SemaObjC/objc-literal-fixit.m +++ b/clang/test/SemaObjC/objc-literal-fixit.m @@ -29,11 +29,11 @@ NSNumber *n6 = '1'; // expected-error{{numeric literal must be prefixed by '@'}} int i; - NSNumber *n7 = i; // c-warning{{incompatible integer to pointer conversion}} + NSNumber *n7 = i; // c-error{{incompatible integer to pointer conversion}} // arc-error@-1{{implicit conversion of 'int' to 'NSNumber *' is disallowed with ARC}} // cxx-error@-2{{cannot initialize a variable of type 'NSNumber *' with an lvalue of type 'int'}} - id n8 = 1; // c-warning{{incompatible integer to pointer conversion}} + id n8 = 1; // c-error{{incompatible integer to pointer conversion}} // arc-error@-1{{implicit conversion of 'int' to 'id' is disallowed with ARC}} // cxx-error@-2{{cannot initialize a variable of type 'id' with an rvalue of type 'int'}} } diff --git a/clang/test/SemaObjC/signed-char-bool-conversion.m b/clang/test/SemaObjC/signed-char-bool-conversion.m --- a/clang/test/SemaObjC/signed-char-bool-conversion.m +++ b/clang/test/SemaObjC/signed-char-bool-conversion.m @@ -24,9 +24,7 @@ b = 2.1; // expected-warning {{implicit conversion from constant value 2.1 to 'BOOL'; the only well defined values for 'BOOL' are YES and NO}} b = YES; -#ifndef __cplusplus - b = ptr; // expected-warning {{incompatible pointer to integer conversion assigning to 'BOOL' (aka 'signed char') from 'int *'}} -#endif + b = ptr; // expected-error {{incompatible pointer to integer conversion assigning to 'BOOL' (aka 'signed char') from 'int *'}} } @interface BoolProp @@ -41,9 +39,7 @@ bp.p = i; // expected-warning {{implicit conversion from integral type 'int' to 'BOOL'}} bp.p = b; bp.p = bp.p; -#ifndef __cplusplus - bp.p = ptr; // expected-warning {{incompatible pointer to integer conversion assigning to 'BOOL' (aka 'signed char') from 'int *'}} -#endif + bp.p = ptr; // expected-error {{incompatible pointer to integer conversion assigning to 'BOOL' (aka 'signed char') from 'int *'}} bp.p = 1; bp.p = 2; // expected-warning {{implicit conversion from constant value 2 to 'BOOL'; the only well defined values for 'BOOL' are YES and NO}} } diff --git a/clang/test/SemaOpenCL/atomic-ops.cl b/clang/test/SemaOpenCL/atomic-ops.cl --- a/clang/test/SemaOpenCL/atomic-ops.cl +++ b/clang/test/SemaOpenCL/atomic-ops.cl @@ -82,7 +82,7 @@ __opencl_atomic_load(ci, memory_order_acquire, memory_scope_work_group); __opencl_atomic_init(&gn, 456); - __opencl_atomic_init(&gn, (void*)0); // expected-warning{{incompatible pointer to integer conversion passing '__generic void *' to parameter of type 'int'}} + __opencl_atomic_init(&gn, (void*)0); // expected-error{{incompatible pointer to integer conversion passing '__generic void *' to parameter of type 'int'}} } void memory_checks(atomic_int *Ap, int *p, int val) { diff --git a/clang/test/SemaOpenCL/builtins-amdgcn-error.cl b/clang/test/SemaOpenCL/builtins-amdgcn-error.cl --- a/clang/test/SemaOpenCL/builtins-amdgcn-error.cl +++ b/clang/test/SemaOpenCL/builtins-amdgcn-error.cl @@ -146,7 +146,7 @@ __builtin_amdgcn_fence(4); // expected-error {{too few arguments to function call, expected 2}} __builtin_amdgcn_fence(4, 4, 4); // expected-error {{too many arguments to function call, expected 2}} __builtin_amdgcn_fence(3.14, ""); // expected-warning {{implicit conversion from 'double' to 'unsigned int' changes value from 3.14 to 3}} - __builtin_amdgcn_fence(__ATOMIC_ACQUIRE, 5); // expected-warning {{incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *'}} + __builtin_amdgcn_fence(__ATOMIC_ACQUIRE, 5); // expected-error {{incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *'}} const char ptr[] = "workgroup"; __builtin_amdgcn_fence(__ATOMIC_ACQUIRE, ptr); // expected-error {{expression is not a string literal}} } @@ -164,7 +164,7 @@ val = __builtin_amdgcn_atomic_inc32(4); // expected-error {{too few arguments to function call, expected 4}} val = __builtin_amdgcn_atomic_inc32(&val, val, 4, 4, 4, 4); // expected-error {{too many arguments to function call, expected 4}} val = __builtin_amdgcn_atomic_inc32(&val, val, 3.14, ""); // expected-warning {{implicit conversion from 'double' to 'unsigned int' changes value from 3.14 to 3}} - val = __builtin_amdgcn_atomic_inc32(&val, val, __ATOMIC_ACQUIRE, 5); // expected-warning {{incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *'}} + val = __builtin_amdgcn_atomic_inc32(&val, val, __ATOMIC_ACQUIRE, 5); // expected-error {{incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *'}} const char ptr[] = "workgroup"; val = __builtin_amdgcn_atomic_inc32(&val, val, __ATOMIC_ACQUIRE, ptr); // expected-error {{expression is not a string literal}} int signedVal = 15; @@ -179,7 +179,7 @@ val = __builtin_amdgcn_atomic_inc64(4); // expected-error {{too few arguments to function call, expected 4}} val = __builtin_amdgcn_atomic_inc64(&val, val, 4, 4, 4, 4); // expected-error {{too many arguments to function call, expected 4}} val = __builtin_amdgcn_atomic_inc64(&val, val, 3.14, ""); // expected-warning {{implicit conversion from 'double' to 'unsigned int' changes value from 3.14 to 3}} - val = __builtin_amdgcn_atomic_inc64(&val, val, __ATOMIC_ACQUIRE, 5); // expected-warning {{incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *'}} + val = __builtin_amdgcn_atomic_inc64(&val, val, __ATOMIC_ACQUIRE, 5); // expected-error {{incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *'}} const char ptr[] = "workgroup"; val = __builtin_amdgcn_atomic_inc64(&val, val, __ATOMIC_ACQUIRE, ptr); // expected-error {{expression is not a string literal}} __INT64_TYPE__ signedVal = 15; @@ -194,7 +194,7 @@ val = __builtin_amdgcn_atomic_dec32(4); // expected-error {{too few arguments to function call, expected 4}} val = __builtin_amdgcn_atomic_dec32(&val, val, 4, 4, 4, 4); // expected-error {{too many arguments to function call, expected 4}} val = __builtin_amdgcn_atomic_dec32(&val, val, 3.14, ""); // expected-warning {{implicit conversion from 'double' to 'unsigned int' changes value from 3.14 to 3}} - val = __builtin_amdgcn_atomic_dec32(&val, val, __ATOMIC_ACQUIRE, 5); // expected-warning {{incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *'}} + val = __builtin_amdgcn_atomic_dec32(&val, val, __ATOMIC_ACQUIRE, 5); // expected-error {{incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *'}} const char ptr[] = "workgroup"; val = __builtin_amdgcn_atomic_dec32(&val, val, __ATOMIC_ACQUIRE, ptr); // expected-error {{expression is not a string literal}} int signedVal = 15; @@ -209,7 +209,7 @@ val = __builtin_amdgcn_atomic_dec64(4); // expected-error {{too few arguments to function call, expected 4}} val = __builtin_amdgcn_atomic_dec64(&val, val, 4, 4, 4, 4); // expected-error {{too many arguments to function call, expected 4}} val = __builtin_amdgcn_atomic_dec64(&val, val, 3.14, ""); // expected-warning {{implicit conversion from 'double' to 'unsigned int' changes value from 3.14 to 3}} - val = __builtin_amdgcn_atomic_dec64(&val, val, __ATOMIC_ACQUIRE, 5); // expected-warning {{incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *'}} + val = __builtin_amdgcn_atomic_dec64(&val, val, __ATOMIC_ACQUIRE, 5); // expected-error {{incompatible integer to pointer conversion passing 'int' to parameter of type 'const char *'}} const char ptr[] = "workgroup"; val = __builtin_amdgcn_atomic_dec64(&val, val, __ATOMIC_ACQUIRE, ptr); // expected-error {{expression is not a string literal}} __INT64_TYPE__ signedVal = 15; diff --git a/clang/test/VFS/Inputs/external-names.h b/clang/test/VFS/Inputs/external-names.h --- a/clang/test/VFS/Inputs/external-names.h +++ b/clang/test/VFS/Inputs/external-names.h @@ -1,4 +1,4 @@ void foo(char **c) { *c = __FILE__; - int x = c; // produce a diagnostic + const char **x = c; // produce a diagnostic } diff --git a/clang/test/VFS/external-names.c b/clang/test/VFS/external-names.c --- a/clang/test/VFS/external-names.c +++ b/clang/test/VFS/external-names.c @@ -21,7 +21,7 @@ // Diagnostics: // RUN: %clang_cc1 -I %t -ivfsoverlay %t.external.yaml -fsyntax-only %s 2>&1 | FileCheck -check-prefix=CHECK-DIAG-EXTERNAL %s -// CHECK-DIAG-EXTERNAL: {{.*}}Inputs{{..?}}external-names.h:{{[0-9]*:[0-9]*}}: warning: incompatible pointer +// CHECK-DIAG-EXTERNAL: {{.*}}Inputs{{..?}}external-names.h:{{[0-9]*:[0-9]*}}: warning: initializing 'const char **' // RUN: %clang_cc1 -I %t -ivfsoverlay %t.yaml -fsyntax-only %s 2>&1 | FileCheck -check-prefix=CHECK-DIAG %s // CHECK-DIAG-NOT: Inputs diff --git a/compiler-rt/test/dfsan/gep.c b/compiler-rt/test/dfsan/gep.c --- a/compiler-rt/test/dfsan/gep.c +++ b/compiler-rt/test/dfsan/gep.c @@ -1,5 +1,5 @@ -// RUN: %clang_dfsan %s -mllvm -dfsan-combine-offset-labels-on-gep=false -o %t && %run %t -// RUN: %clang_dfsan %s -DPROP_OFFSET_LABELS -o %t && %run %t +// RUN: %clang_dfsan %s -mllvm -dfsan-combine-offset-labels-on-gep=false -Wno-error=int-conversion -o %t && %run %t +// RUN: %clang_dfsan %s -DPROP_OFFSET_LABELS -Wno-error=int-conversion -o %t && %run %t // // REQUIRES: x86_64-target-arch diff --git a/compiler-rt/test/dfsan/sigaction.c b/compiler-rt/test/dfsan/sigaction.c --- a/compiler-rt/test/dfsan/sigaction.c +++ b/compiler-rt/test/dfsan/sigaction.c @@ -1,5 +1,5 @@ -// RUN: %clang_dfsan -DUSE_SIGNAL_ACTION %s -o %t && %run %t -// RUN: %clang_dfsan %s -o %t && %run %t +// RUN: %clang_dfsan -DUSE_SIGNAL_ACTION -Wno-error=int-conversion %s -o %t && %run %t +// RUN: %clang_dfsan -Wno-error=int-conversion %s -o %t && %run %t // // REQUIRES: x86_64-target-arch