CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
153 lines
3.5 KiB
C++
153 lines
3.5 KiB
C++
// RUN: %clang_cc1 -Wuninitialized -Wno-uninitialized-const-reference -fsyntax-only -fcxx-exceptions %s -verify -std=c++1y
|
|
|
|
// Stub out types for 'typeid' to work.
|
|
namespace std { class type_info {}; }
|
|
|
|
int test1_aux(int &x);
|
|
int test1() {
|
|
int x;
|
|
test1_aux(x);
|
|
return x; // no-warning
|
|
}
|
|
|
|
int test2_aux() {
|
|
int x;
|
|
int &y = x;
|
|
return x; // no-warning
|
|
}
|
|
|
|
// Don't warn on unevaluated contexts.
|
|
void unevaluated_tests() {
|
|
int x;
|
|
(void)sizeof(x);
|
|
(void)typeid(x);
|
|
}
|
|
|
|
// Warn for glvalue arguments to typeid whose type is polymorphic.
|
|
struct A { virtual ~A() {} };
|
|
void polymorphic_test() {
|
|
A *a; // expected-note{{initialize the variable 'a' to silence this warning}}
|
|
(void)typeid(*a); // expected-warning{{variable 'a' is uninitialized when used here}}
|
|
}
|
|
|
|
// Handle cases where the CFG may constant fold some branches, thus
|
|
// mitigating the need for some path-sensitivity in the analysis.
|
|
unsigned test3_aux();
|
|
unsigned test3() {
|
|
unsigned x = 0;
|
|
const bool flag = true;
|
|
if (flag && (x = test3_aux()) == 0) {
|
|
return x;
|
|
}
|
|
return x;
|
|
}
|
|
unsigned test3_b() {
|
|
unsigned x ;
|
|
const bool flag = true;
|
|
if (flag && (x = test3_aux()) == 0) {
|
|
x = 1;
|
|
}
|
|
return x; // no-warning
|
|
}
|
|
unsigned test3_c() {
|
|
unsigned x; // expected-note{{initialize the variable 'x' to silence this warning}}
|
|
const bool flag = false;
|
|
if (flag && (x = test3_aux()) == 0) {
|
|
x = 1;
|
|
}
|
|
return x; // expected-warning{{variable 'x' is uninitialized when used here}}
|
|
}
|
|
|
|
enum test4_A {
|
|
test4_A_a, test_4_A_b
|
|
};
|
|
test4_A test4() {
|
|
test4_A a; // expected-note{{variable 'a' is declared here}}
|
|
return a; // expected-warning{{variable 'a' is uninitialized when used here}}
|
|
}
|
|
|
|
// Test variables getting invalidated by function calls with reference arguments
|
|
// *AND* there are multiple invalidated arguments.
|
|
void test5_aux(int &, int &);
|
|
|
|
int test5() {
|
|
int x, y;
|
|
test5_aux(x, y);
|
|
return x + y; // no-warning
|
|
}
|
|
|
|
// This test previously crashed Sema.
|
|
class Rdar9188004A {
|
|
public:
|
|
virtual ~Rdar9188004A();
|
|
};
|
|
|
|
template< typename T > class Rdar9188004B : public Rdar9188004A {
|
|
virtual double *foo(Rdar9188004B *next) const {
|
|
double *values = next->foo(0);
|
|
try {
|
|
}
|
|
catch(double e) {
|
|
values[0] = e;
|
|
}
|
|
return 0;
|
|
}
|
|
};
|
|
class Rdar9188004C : public Rdar9188004B<Rdar9188004A> {
|
|
virtual void bar(void) const;
|
|
};
|
|
void Rdar9188004C::bar(void) const {}
|
|
|
|
// Don't warn about uninitialized variables in unreachable code.
|
|
void PR9625() {
|
|
if (false) {
|
|
int x;
|
|
(void)static_cast<float>(x); // no-warning
|
|
}
|
|
}
|
|
|
|
// Don't warn about variables declared in "catch"
|
|
void RDar9251392_bar(const char *msg);
|
|
|
|
void RDar9251392() {
|
|
try {
|
|
throw "hi";
|
|
}
|
|
catch (const char* msg) {
|
|
RDar9251392_bar(msg); // no-warning
|
|
}
|
|
}
|
|
|
|
// Test handling of "no-op" casts.
|
|
void test_noop_cast()
|
|
{
|
|
int x = 1;
|
|
int y = (int&)x; // no-warning
|
|
}
|
|
|
|
void test_noop_cast2() {
|
|
int x; // expected-note {{initialize the variable 'x' to silence this warning}}
|
|
int y = (int&)x; // expected-warning {{uninitialized when used here}}
|
|
}
|
|
|
|
// Test handling of bit casts.
|
|
void test_bitcasts() {
|
|
int x = 1;
|
|
int y = (float &)x; // no-warning
|
|
}
|
|
|
|
void test_bitcasts_2() {
|
|
int x; // expected-note {{initialize the variable 'x' to silence this warning}}
|
|
int y = (float &)x; // expected-warning {{uninitialized when used here}}
|
|
}
|
|
|
|
void consume_const_ref(const int &n);
|
|
int test_const_ref() {
|
|
int n; // expected-note {{variable}}
|
|
consume_const_ref(n);
|
|
return n; // expected-warning {{uninitialized when used here}}
|
|
}
|
|
|
|
// Don't crash here.
|
|
auto PR19996 = [a=0]{int t; return a;};
|