Converting a pointer to an integer whose result cannot represented in the integer type is undefined behavior is C and prohibited in C++. C++ already has a diagnostic when casting. This adds a diagnostic for C. Since this diagnostic uses the range of the conversion it also modifies int-to-pointer-cast diagnostic to use a range. Fixes PR8718: No warning on casting between pointer and non-pointer-sized int Differential Revision: https://reviews.llvm.org/D72231
17 lines
449 B
C
17 lines
449 B
C
// RUN: %clang_analyze_cc1 -analyzer-checker=core,unix -Wno-pointer-to-int-cast -verify %s
|
|
// expected-no-diagnostics
|
|
|
|
// Testing core functionality of the SValBuilder.
|
|
|
|
int SValBuilderLogicNoCrash(int *x) {
|
|
return 3 - (int)(x +3);
|
|
}
|
|
|
|
// http://llvm.org/bugs/show_bug.cgi?id=15863
|
|
// Don't crash when mixing 'bool' and 'int' in implicit comparisons to 0.
|
|
void pr15863() {
|
|
extern int getBool();
|
|
_Bool a = getBool();
|
|
(void)!a; // no-warning
|
|
}
|