Files
TheRock/compiler/amd-llvm/clang/test/Analysis/cxx-uninitialized-object-unionlike-constructs.cpp
T
derek.holloway 7502bf64a4
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
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

160 lines
3.5 KiB
C++

// RUN: %clang_analyze_cc1 -analyzer-checker=core,optin.cplusplus.UninitializedObject \
// RUN: -analyzer-config optin.cplusplus.UninitializedObject:Pedantic=true -DPEDANTIC \
// RUN: -analyzer-config optin.cplusplus.UninitializedObject:IgnoreRecordsWithField="[Tt]ag|[Kk]ind" \
// RUN: -std=c++11 -verify %s
// RUN: %clang_analyze_cc1 -analyzer-checker=core,optin.cplusplus.UninitializedObject \
// RUN: -analyzer-config optin.cplusplus.UninitializedObject:Pedantic=true -DPEDANTIC \
// RUN: -analyzer-config optin.cplusplus.UninitializedObject:IgnoreRecordsWithField="[Tt]ag|[Kk]ind" \
// RUN: -std=c++11 -verify %s -DHEAP_ALLOCATION
// RUN: not %clang_analyze_cc1 -verify %s \
// RUN: -analyzer-checker=core \
// RUN: -analyzer-checker=optin.cplusplus.UninitializedObject \
// RUN: -analyzer-config \
// RUN: optin.cplusplus.UninitializedObject:IgnoreRecordsWithField="([)]" \
// RUN: 2>&1 | FileCheck %s -check-prefix=CHECK-UNINIT-INVALID-REGEX
// CHECK-UNINIT-INVALID-REGEX: (frontend): invalid input for checker option
// CHECK-UNINIT-INVALID-REGEX-SAME: 'optin.cplusplus.UninitializedObject:IgnoreRecordsWithField',
// CHECK-UNINIT-INVALID-REGEX-SAME: that expects a valid regex, building failed
// CHECK-UNINIT-INVALID-REGEX-SAME: with error message "parentheses not
// CHECK-UNINIT-INVALID-REGEX-SAME: balanced"
#ifdef HEAP_ALLOCATION
#define INIT(CLS, ARGS) new CLS ARGS
#else
#define INIT(CLS, ARGS) (void) CLS ARGS
#endif
// expected-no-diagnostics
// Both type and name contains "kind".
struct UnionLikeStruct1 {
enum Kind {
volume,
area
} kind;
int Volume;
int Area;
UnionLikeStruct1(Kind kind, int Val) : kind(kind) {
switch (kind) {
case volume:
Volume = Val;
break;
case area:
Area = Val;
break;
}
}
};
void fUnionLikeStruct1() {
INIT(UnionLikeStruct1, (UnionLikeStruct1::volume, 10));
}
// Only name contains "kind".
struct UnionLikeStruct2 {
enum Type {
volume,
area
} kind;
int Volume;
int Area;
UnionLikeStruct2(Type kind, int Val) : kind(kind) {
switch (kind) {
case volume:
Volume = Val;
break;
case area:
Area = Val;
break;
}
}
};
void fUnionLikeStruct2() {
INIT(UnionLikeStruct2, (UnionLikeStruct2::volume, 10));
}
// Only type contains "kind".
struct UnionLikeStruct3 {
enum Kind {
volume,
area
} type;
int Volume;
int Area;
UnionLikeStruct3(Kind type, int Val) : type(type) {
switch (type) {
case volume:
Volume = Val;
break;
case area:
Area = Val;
break;
}
}
};
void fUnionLikeStruct3() {
INIT(UnionLikeStruct3, (UnionLikeStruct3::volume, 10));
}
// Only type contains "tag".
struct UnionLikeStruct4 {
enum Tag {
volume,
area
} type;
int Volume;
int Area;
UnionLikeStruct4(Tag type, int Val) : type(type) {
switch (type) {
case volume:
Volume = Val;
break;
case area:
Area = Val;
break;
}
}
};
void fUnionLikeStruct4() {
INIT(UnionLikeStruct4, (UnionLikeStruct4::volume, 10));
}
// Both name and type name contains but does not equal to tag/kind.
struct UnionLikeStruct5 {
enum WhateverTagBlahBlah {
volume,
area
} FunnyKindName;
int Volume;
int Area;
UnionLikeStruct5(WhateverTagBlahBlah type, int Val) : FunnyKindName(type) {
switch (FunnyKindName) {
case volume:
Volume = Val;
break;
case area:
Area = Val;
break;
}
}
};
void fUnionLikeStruct5() {
INIT(UnionLikeStruct5, (UnionLikeStruct5::volume, 10));
}