mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-15 12:39:19 +00:00
27ed855a6e
Summary: When comparing a symbolic region and a constant, the constant would be widened or truncated to the width of a void pointer, meaning that the constant could be incorrectly truncated when handling symbols for non-default address spaces. In the attached test case this resulted in a false positive since the constant was truncated to zero. To fix this, widen/truncate the constant to the width of the symbol expression's type. This commit does not consider non-symbolic regions as I'm not sure how to generalize getting the type there. This fixes PR40814. Reviewers: NoQ, zaks.anna, george.karpenkov Reviewed By: NoQ Subscribers: xazax.hun, baloghadamsoftware, szepet, a.sidorin, mikhail.ramalho, Szelethus, donat.nagy, dkrupp, jdoerfert, Charusso, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D58665 llvm-svn: 355592
12 lines
293 B
Common Lisp
12 lines
293 B
Common Lisp
//RUN: %clang_analyze_cc1 -triple amdgcn-unknown-unknown -analyze -analyzer-checker=core -verify %s
|
|
// expected-no-diagnostics
|
|
|
|
#include <stdint.h>
|
|
|
|
void bar(__global int *p) __attribute__((nonnull(1)));
|
|
|
|
void foo(__global int *p) {
|
|
if ((uint64_t)p <= 1UL << 32)
|
|
bar(p); // no-warning
|
|
}
|