Author: David Tarditi Date: 2025-02-26T13:57:33+01:00 New Revision: 8138d85f630726d2ddbf4a7950683c7db3853eb8
URL: https://github.com/llvm/llvm-project/commit/8138d85f630726d2ddbf4a7950683c7db3853eb8 DIFF: https://github.com/llvm/llvm-project/commit/8138d85f630726d2ddbf4a7950683c7db3853eb8.diff LOG: [analyzer] Update the undefined assignment checker diagnostics to not use the term 'garbage' (#126596) A clang user pointed out that messages for the static analyzer undefined assignment checker use the term ‘garbage’, which might have a negative connotation to some users. This change updates the messages to use the term ‘uninitialized’. This is the usual reason why a value is undefined in the static analyzer and describes the logical error that a programmer should take action to fix. Out-of-bounds reads can also produce undefined values in the static analyzer. The right long-term design is to have to the array bounds checker cover out-of-bounds reads, so we do not cover that case in the updated messages. The recent improvements to the array bounds checker make it a candidate to add to the core set of checkers. rdar://133418644 Added: Modified: clang/lib/StaticAnalyzer/Checkers/UndefinedAssignmentChecker.cpp clang/test/Analysis/Inputs/expected-plists/edges-new.mm.plist clang/test/Analysis/Inputs/expected-plists/plist-output.m.plist clang/test/Analysis/a_flaky_crash.cpp clang/test/Analysis/analysis-after-multiple-dtors.cpp clang/test/Analysis/array-init-loop.cpp clang/test/Analysis/array-punned-region.c clang/test/Analysis/builtin_overflow_notes.c clang/test/Analysis/call-invalidation.cpp clang/test/Analysis/ctor-array.cpp clang/test/Analysis/ctor.mm clang/test/Analysis/diagnostics/no-store-func-path-notes.m clang/test/Analysis/fread.c clang/test/Analysis/implicit-ctor-undef-value.cpp clang/test/Analysis/initialization.c clang/test/Analysis/initialization.cpp clang/test/Analysis/kmalloc-linux.c clang/test/Analysis/malloc-annotations.c clang/test/Analysis/malloc.c clang/test/Analysis/misc-ps.c clang/test/Analysis/operator-calls.cpp clang/test/Analysis/stack-addr-ps.cpp clang/test/Analysis/undef-buffers.c clang/test/Analysis/uninit-const.c clang/test/Analysis/uninit-const.cpp clang/test/Analysis/uninit-structured-binding-array.cpp clang/test/Analysis/uninit-structured-binding-struct.cpp clang/test/Analysis/uninit-structured-binding-tuple.cpp clang/test/Analysis/uninit-vals.m clang/test/Analysis/zero-size-non-pod-array.cpp Removed: ################################################################################ diff --git a/clang/lib/StaticAnalyzer/Checkers/UndefinedAssignmentChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/UndefinedAssignmentChecker.cpp index ddc6cc9e8202c..e98de333f8dd3 100644 --- a/clang/lib/StaticAnalyzer/Checkers/UndefinedAssignmentChecker.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/UndefinedAssignmentChecker.cpp @@ -23,7 +23,7 @@ using namespace ento; namespace { class UndefinedAssignmentChecker : public Checker<check::Bind> { - const BugType BT{this, "Assigned value is garbage or undefined"}; + const BugType BT{this, "Assigned value is uninitialized"}; public: void checkBind(SVal location, SVal val, const Stmt *S, @@ -57,8 +57,7 @@ void UndefinedAssignmentChecker::checkBind(SVal location, SVal val, while (StoreE) { if (const UnaryOperator *U = dyn_cast<UnaryOperator>(StoreE)) { - OS << "The expression is an uninitialized value. " - "The computed value will also be garbage"; + OS << "The expression uses uninitialized memory"; ex = U->getSubExpr(); break; @@ -67,8 +66,8 @@ void UndefinedAssignmentChecker::checkBind(SVal location, SVal val, if (const BinaryOperator *B = dyn_cast<BinaryOperator>(StoreE)) { if (B->isCompoundAssignmentOp()) { if (C.getSVal(B->getLHS()).isUndef()) { - OS << "The left expression of the compound assignment is an " - "uninitialized value. The computed value will also be garbage"; + OS << "The left expression of the compound assignment uses " + << "uninitialized memory"; ex = B->getLHS(); break; } @@ -89,7 +88,7 @@ void UndefinedAssignmentChecker::checkBind(SVal location, SVal val, for (auto *I : CD->inits()) { if (I->getInit()->IgnoreImpCasts() == StoreE) { OS << "Value assigned to field '" << I->getMember()->getName() - << "' in implicit constructor is garbage or undefined"; + << "' in implicit constructor is uninitialized"; break; } } diff --git a/clang/test/Analysis/Inputs/expected-plists/edges-new.mm.plist b/clang/test/Analysis/Inputs/expected-plists/edges-new.mm.plist index 31b6286b4465e..04f9d3e41ebf0 100644 --- a/clang/test/Analysis/Inputs/expected-plists/edges-new.mm.plist +++ b/clang/test/Analysis/Inputs/expected-plists/edges-new.mm.plist @@ -2578,17 +2578,17 @@ </array> <key>depth</key><integer>0</integer> <key>extended_message</key> - <string>The left expression of the compound assignment is an uninitialized value. The computed value will also be garbage</string> + <string>The left expression of the compound assignment uses uninitialized memory</string> <key>message</key> - <string>The left expression of the compound assignment is an uninitialized value. The computed value will also be garbage</string> + <string>The left expression of the compound assignment uses uninitialized memory</string> </dict> </array> - <key>description</key><string>The left expression of the compound assignment is an uninitialized value. The computed value will also be garbage</string> + <key>description</key><string>The left expression of the compound assignment uses uninitialized memory</string> <key>category</key><string>Logic error</string> - <key>type</key><string>Assigned value is garbage or undefined</string> + <key>type</key><string>Assigned value is uninitialized</string> <key>check_name</key><string>core.uninitialized.Assign</string> <!-- This hash is experimental and going to change! --> - <key>issue_hash_content_of_line_in_context</key><string>025372576cd3ba6716044f93a51c978c</string> + <key>issue_hash_content_of_line_in_context</key><string>324827600c298776167cd9562f71bda6</string> <key>issue_context_kind</key><string>function</string> <key>issue_context</key><string>test_objc_fast_enumeration_2</string> <key>issue_hash_function_offset</key><string>5</string> diff --git a/clang/test/Analysis/Inputs/expected-plists/plist-output.m.plist b/clang/test/Analysis/Inputs/expected-plists/plist-output.m.plist index 8b8cc3239bd4b..d8ed8d49e3ac7 100644 --- a/clang/test/Analysis/Inputs/expected-plists/plist-output.m.plist +++ b/clang/test/Analysis/Inputs/expected-plists/plist-output.m.plist @@ -5864,17 +5864,17 @@ </array> <key>depth</key><integer>0</integer> <key>extended_message</key> - <string>The left expression of the compound assignment is an uninitialized value. The computed value will also be garbage</string> + <string>The left expression of the compound assignment uses uninitialized memory</string> <key>message</key> - <string>The left expression of the compound assignment is an uninitialized value. The computed value will also be garbage</string> + <string>The left expression of the compound assignment uses uninitialized memory</string> </dict> </array> - <key>description</key><string>The left expression of the compound assignment is an uninitialized value. The computed value will also be garbage</string> + <key>description</key><string>The left expression of the compound assignment uses uninitialized memory</string> <key>category</key><string>Logic error</string> - <key>type</key><string>Assigned value is garbage or undefined</string> + <key>type</key><string>Assigned value is uninitialized</string> <key>check_name</key><string>core.uninitialized.Assign</string> <!-- This hash is experimental and going to change! --> - <key>issue_hash_content_of_line_in_context</key><string>21c774309bdfd487c3d09a61a671bbcc</string> + <key>issue_hash_content_of_line_in_context</key><string>faa8858031ed123ff98cc23cf14d462f</string> <key>issue_context_kind</key><string>function</string> <key>issue_context</key><string>test_loop_fast_enumeration</string> <key>issue_hash_function_offset</key><string>5</string> diff --git a/clang/test/Analysis/a_flaky_crash.cpp b/clang/test/Analysis/a_flaky_crash.cpp index f350c1e1280cf..1ce6297f5e4e9 100644 --- a/clang/test/Analysis/a_flaky_crash.cpp +++ b/clang/test/Analysis/a_flaky_crash.cpp @@ -14,7 +14,7 @@ bool bar(S); void foo() { int x; if (true && bar(S())) - ++x; // expected-warning{{The expression is an uninitialized value. The computed value will also be garbage}} + ++x; // expected-warning{{The expression uses uninitialized memory}} } // 256 copies of the same run-line to make it crash more often when it breaks. diff --git a/clang/test/Analysis/analysis-after-multiple-dtors.cpp b/clang/test/Analysis/analysis-after-multiple-dtors.cpp index a8f6d38fbd1bb..89ac90f976a6d 100644 --- a/clang/test/Analysis/analysis-after-multiple-dtors.cpp +++ b/clang/test/Analysis/analysis-after-multiple-dtors.cpp @@ -23,6 +23,6 @@ int main() { int x; int y = x; - // expected-warning@-1{{Assigned value is garbage or undefined}} + // expected-warning@-1{{Assigned value is uninitialized}} (void)y; } diff --git a/clang/test/Analysis/array-init-loop.cpp b/clang/test/Analysis/array-init-loop.cpp index b28468b7f560b..dfd1f9553a108 100644 --- a/clang/test/Analysis/array-init-loop.cpp +++ b/clang/test/Analysis/array-init-loop.cpp @@ -19,7 +19,7 @@ void array_uninit() { auto [a, b, c, d, e] = arr; - int x = e; // expected-warning{{Assigned value is garbage or undefined}} + int x = e; // expected-warning{{Assigned value is uninitialized}} } void lambda_init() { @@ -168,7 +168,7 @@ struct S3_duplicate { void array_uninit_non_pod() { S3 arr[1]; - auto [a] = arr; // expected-warning@159{{ in implicit constructor is garbage or undefined }} + auto [a] = arr; // expected-warning@159{{ in implicit constructor is uninitialized}} } void lambda_init_non_pod() { @@ -191,7 +191,7 @@ void lambda_init_non_pod() { void lambda_uninit_non_pod() { S3_duplicate arr[4]; - int l = [arr] { return arr[3].i; }(); // expected-warning@164{{ in implicit constructor is garbage or undefined }} + int l = [arr] { return arr[3].i; }(); // expected-warning@164{{ in implicit constructor is uninitialized }} } // If this struct is being copy/move constructed by the implicit ctors, ArrayInitLoopExpr diff --git a/clang/test/Analysis/array-punned-region.c b/clang/test/Analysis/array-punned-region.c index d319fd7367ec5..f819aacace6a8 100644 --- a/clang/test/Analysis/array-punned-region.c +++ b/clang/test/Analysis/array-punned-region.c @@ -20,7 +20,7 @@ void array_struct_bitfield_1() { int array_struct_bitfield_2() { BITFIELD_CAST ff = {0}; BITFIELD_CAST *pff = &ff; - int a = *((int *)pff + 2); // expected-warning{{Assigned value is garbage or undefined [core.uninitialized.Assign]}} + int a = *((int *)pff + 2); // expected-warning{{Assigned value is uninitialized [core.uninitialized.Assign]}} return a; } diff --git a/clang/test/Analysis/builtin_overflow_notes.c b/clang/test/Analysis/builtin_overflow_notes.c index 20f333a4a6cca..5fa2156df925c 100644 --- a/clang/test/Analysis/builtin_overflow_notes.c +++ b/clang/test/Analysis/builtin_overflow_notes.c @@ -23,8 +23,8 @@ void test_overflow_note(int a, int b) if (__builtin_add_overflow(a, b, &res)) { // expected-note {{Assuming overflow}} // expected-note@-1 {{Taking true branch}} - int var = res; // expected-warning{{Assigned value is garbage or undefined}} - // expected-note@-1 {{Assigned value is garbage or undefined}} + int var = res; // expected-warning{{Assigned value is uninitialized}} + // expected-note@-1 {{Assigned value is uninitialized}} return; } } diff --git a/clang/test/Analysis/call-invalidation.cpp b/clang/test/Analysis/call-invalidation.cpp index fb2b892b31a1f..cb503023a1071 100644 --- a/clang/test/Analysis/call-invalidation.cpp +++ b/clang/test/Analysis/call-invalidation.cpp @@ -197,7 +197,7 @@ int testStdCtorDoesNotInvalidateParentObject() { int testStdCtorDoesNotInvalidateParentObjectSwapped() { StdWrappingOpaqueSwapped obj; int x = obj.o.nested_member; // no-garbage: std::Opaque::ctor might initialized this - int y = obj.uninit; // expected-warning {{Assigned value is garbage or undefined}} + int y = obj.uninit; // expected-warning {{Assigned value is uninitialized}} return x + y; } @@ -277,6 +277,6 @@ struct StdWrappingFancyOpaque { int testNestedStdNamespacesAndRecords() { StdWrappingFancyOpaque obj; int x = obj.o.nested_member; // no-garbage: ctor - int y = obj.uninit; // expected-warning {{Assigned value is garbage or undefined}} + int y = obj.uninit; // expected-warning {{Assigned value is uninitialized}} return x + y; } diff --git a/clang/test/Analysis/ctor-array.cpp b/clang/test/Analysis/ctor-array.cpp index 52600b314b010..9d8190f5feca3 100644 --- a/clang/test/Analysis/ctor-array.cpp +++ b/clang/test/Analysis/ctor-array.cpp @@ -12,19 +12,19 @@ struct s { void a1(void) { s arr[3]; int x = arr[0].x; - // expected-warning@-1{{Assigned value is garbage or undefined}} + // expected-warning@-1{{Assigned value is uninitialized}} } void a2(void) { s arr[3]; int x = arr[1].x; - // expected-warning@-1{{Assigned value is garbage or undefined}} + // expected-warning@-1{{Assigned value is uninitialized}} } void a3(void) { s arr[3]; int x = arr[2].x; - // expected-warning@-1{{Assigned value is garbage or undefined}} + // expected-warning@-1{{Assigned value is uninitialized}} } struct s2 { @@ -37,7 +37,7 @@ void b1(void) { clang_analyzer_eval(arr[0].y == 2); // expected-warning{{TRUE}} int x = arr[0].x; - // expected-warning@-1{{Assigned value is garbage or undefined}} + // expected-warning@-1{{Assigned value is uninitialized}} } void b2(void) { @@ -45,7 +45,7 @@ void b2(void) { clang_analyzer_eval(arr[1].y == 2); // expected-warning{{TRUE}} int x = arr[1].x; - // expected-warning@-1{{Assigned value is garbage or undefined}} + // expected-warning@-1{{Assigned value is uninitialized}} } void b3(void) { @@ -53,7 +53,7 @@ void b3(void) { clang_analyzer_eval(arr[2].y == 2); // expected-warning{{TRUE}} int x = arr[2].x; - // expected-warning@-1{{Assigned value is garbage or undefined}} + // expected-warning@-1{{Assigned value is uninitialized}} } void c1(void) { @@ -70,7 +70,7 @@ void c1(void) { clang_analyzer_eval(arr[1].y == 2); // expected-warning{{TRUE}} int x = arr[1].x; - // expected-warning@-1{{Assigned value is garbage or undefined}} + // expected-warning@-1{{Assigned value is uninitialized}} } } @@ -100,7 +100,7 @@ void e1(void) { clang_analyzer_eval(arr[1].arr[1].y == 2); // expected-warning{{TRUE}} int x = arr[1].sarr[1].x; - // expected-warning@-1{{Assigned value is garbage or undefined}} + // expected-warning@-1{{Assigned value is uninitialized}} } void f1(void) { @@ -108,7 +108,7 @@ void f1(void) { clang_analyzer_eval(arr[1][1].y == 2); // expected-warning{{TRUE}} int x = arr[1][1].x; - // expected-warning@-1{{Assigned value is garbage or undefined}} + // expected-warning@-1{{Assigned value is uninitialized}} } struct s5 { @@ -168,14 +168,14 @@ void h2(void) { s a[2][2], b[2][2]; int x = a[1][1].x; - // expected-warning@-1{{Assigned value is garbage or undefined}} + // expected-warning@-1{{Assigned value is uninitialized}} } void h3(void) { s a[2][2], b[2][2]; int x = b[1][1].y; - // expected-warning@-1{{Assigned value is garbage or undefined}} + // expected-warning@-1{{Assigned value is uninitialized}} } struct Base { diff --git a/clang/test/Analysis/ctor.mm b/clang/test/Analysis/ctor.mm index 6ac9050fc29f7..d2665ced82d95 100644 --- a/clang/test/Analysis/ctor.mm +++ b/clang/test/Analysis/ctor.mm @@ -145,24 +145,24 @@ void test() { NonPOD() {} NonPOD(const NonPOD &Other) - : x(Other.x), y(Other.y) // expected-warning {{undefined}} + : x(Other.x), y(Other.y) // expected-warning {{uninitialized}} { } NonPOD(NonPOD &&Other) - : x(Other.x), y(Other.y) // expected-warning {{undefined}} + : x(Other.x), y(Other.y) // expected-warning {{uninitialized}} { } NonPOD &operator=(const NonPOD &Other) { x = Other.x; - y = Other.y; // expected-warning {{undefined}} + y = Other.y; // expected-warning {{uninitialized}} return *this; } NonPOD &operator=(NonPOD &&Other) { x = Other.x; - y = Other.y; // expected-warning {{undefined}} + y = Other.y; // expected-warning {{uninitialized}} return *this; } }; @@ -175,23 +175,23 @@ void test() { Inner() {} Inner(const Inner &Other) - : x(Other.x), y(Other.y) // expected-warning {{undefined}} + : x(Other.x), y(Other.y) // expected-warning {{uninitialized}} { } Inner(Inner &&Other) - : x(Other.x), y(Other.y) // expected-warning {{undefined}} + : x(Other.x), y(Other.y) // expected-warning {{uninitialized}} { } Inner &operator=(const Inner &Other) { - x = Other.x; // expected-warning {{undefined}} + x = Other.x; // expected-warning {{uninitialized}} y = Other.y; return *this; } Inner &operator=(Inner &&Other) { - x = Other.x; // expected-warning {{undefined}} + x = Other.x; // expected-warning {{uninitialized}} y = Other.y; return *this; } diff --git a/clang/test/Analysis/diagnostics/no-store-func-path-notes.m b/clang/test/Analysis/diagnostics/no-store-func-path-notes.m index 4826b38b98a56..623c7e23853de 100644 --- a/clang/test/Analysis/diagnostics/no-store-func-path-notes.m +++ b/clang/test/Analysis/diagnostics/no-store-func-path-notes.m @@ -47,8 +47,8 @@ int initFromBlock(void) { int p; // expected-note{{'p' declared without an initial value}} initializer1(&p, 0); // expected-note{{Calling 'initializer1'}} // expected-note@-1{{Returning from 'initializer1'}} - z = p; // expected-warning{{Assigned value is garbage or undefined}} - // expected-note@-1{{Assigned value is garbage or undefined}} + z = p; // expected-warning{{Assigned value is uninitialized}} + // expected-note@-1{{Assigned value is uninitialized}} }(); return z; } diff --git a/clang/test/Analysis/fread.c b/clang/test/Analysis/fread.c index 8dc998ea1e899..e3463bce3de47 100644 --- a/clang/test/Analysis/fread.c +++ b/clang/test/Analysis/fread.c @@ -113,9 +113,9 @@ void random_access_read1(int index) { case 0: // c[0] is not mutated by fread. if (success) { - char p = c[0]; // expected-warning {{Assigned value is garbage or undefined}} We kept the first byte intact. + char p = c[0]; // expected-warning {{Assigned value is uninitialized}} We kept the first byte intact. } else { - char p = c[0]; // expected-warning {{Assigned value is garbage or undefined}} We kept the first byte intact. + char p = c[0]; // expected-warning {{Assigned value is uninitialized}} We kept the first byte intact. } break; @@ -147,9 +147,9 @@ void random_access_read1(int index) { case 3: // c[3] is not mutated by fread. if (success) { - long p = c[3]; // expected-warning {{Assigned value is garbage or undefined}} + long p = c[3]; // expected-warning {{Assigned value is uninitialized}} } else { - long p = c[3]; // expected-warning {{Assigned value is garbage or undefined}} + long p = c[3]; // expected-warning {{Assigned value is uninitialized}} } break; } @@ -169,10 +169,10 @@ void random_access_read2(int b) { clang_analyzer_isTainted(p); // expected-warning {{YES}} clang_analyzer_dump(p); // expected-warning {{conj_}} } else { - int p = buffer[0]; // expected-warning {{Assigned value is garbage or undefined}} + int p = buffer[0]; // expected-warning {{Assigned value is uninitialized}} } } else { - int p = buffer[0]; // expected-warning {{Assigned value is garbage or undefined}} + int p = buffer[0]; // expected-warning {{Assigned value is uninitialized}} } fclose(fp); } @@ -283,9 +283,9 @@ void compound_read2(void) { if (fp) { struct S s; // s.a is not touched by fread. if (1 == fread(&s.b, sizeof(s.b), 1, fp)) { - long p = s.a; // expected-warning {{Assigned value is garbage or undefined}} + long p = s.a; // expected-warning {{Assigned value is uninitialized}} } else { - long p = s.a; // expected-warning {{Assigned value is garbage or undefined}} + long p = s.a; // expected-warning {{Assigned value is uninitialized}} } fclose(fp); } @@ -296,9 +296,9 @@ void var_read(void) { if (fp) { int a, b; // 'a' is not touched by fread. if (1 == fread(&b, sizeof(b), 1, fp)) { - long p = a; // expected-warning{{Assigned value is garbage or undefined}} + long p = a; // expected-warning{{Assigned value is uninitialized}} } else { - long p = a; // expected-warning{{Assigned value is garbage or undefined}} + long p = a; // expected-warning{{Assigned value is uninitialized}} } fclose(fp); } diff --git a/clang/test/Analysis/implicit-ctor-undef-value.cpp b/clang/test/Analysis/implicit-ctor-undef-value.cpp index 87824c0533a0a..3ef363b74b571 100644 --- a/clang/test/Analysis/implicit-ctor-undef-value.cpp +++ b/clang/test/Analysis/implicit-ctor-undef-value.cpp @@ -9,8 +9,8 @@ struct S { // Warning is in a weird position because the body of the constructor is // missing. Specify which field is being assigned. -class C { // expected-warning{{Value assigned to field 'y' in implicit constructor is garbage or undefined}} - // expected-note@-1{{Value assigned to field 'y' in implicit constructor is garbage or undefined}} +class C { // expected-warning{{Value assigned to field 'y' in implicit constructor is uninitialized}} + // expected-note@-1{{Value assigned to field 'y' in implicit constructor is uninitialized}} int x, y; S s; @@ -34,8 +34,8 @@ class C { // It is not necessary to specify which field is being assigned to. C(const C &c): x(c.x), - y(c.y) // expected-warning{{Assigned value is garbage or undefined}} - // expected-note@-1{{Assigned value is garbage or undefined}} + y(c.y) // expected-warning{{Assigned value is uninitialized}} + // expected-note@-1{{Assigned value is uninitialized}} {} }; @@ -53,8 +53,8 @@ struct S { S(const S &) {} }; -class C { // expected-warning{{Value assigned to field 'y' in implicit constructor is garbage or undefined}} - // expected-note@-1{{Value assigned to field 'y' in implicit constructor is garbage or undefined}} +class C { // expected-warning{{Value assigned to field 'y' in implicit constructor is uninitialized}} + // expected-note@-1{{Value assigned to field 'y' in implicit constructor is uninitialized}} int x, y; S s; diff --git a/clang/test/Analysis/initialization.c b/clang/test/Analysis/initialization.c index d394a902ffeb7..bd003b721d91d 100644 --- a/clang/test/Analysis/initialization.c +++ b/clang/test/Analysis/initialization.c @@ -49,13 +49,13 @@ void glob_array_index2(void) { void glob_invalid_index1(void) { int x = -42; - int res = glob_arr1[x]; // expected-warning{{garbage or undefined}} + int res = glob_arr1[x]; // expected-warning{{uninitialized}} } void glob_invalid_index2(void) { const int *ptr = glob_arr1; int x = 42; - int res = ptr[x]; // expected-warning{{garbage or undefined}} + int res = ptr[x]; // expected-warning{{uninitialized}} } const int glob_arr2[3][3] = {[0][0] = 1, [1][1] = 5, [2][0] = 7}; @@ -81,12 +81,12 @@ void negative_index(void) { void glob_invalid_index3(void) { int x = -1, y = -1; - int res = glob_arr2[x][y]; // expected-warning{{garbage or undefined}} + int res = glob_arr2[x][y]; // expected-warning{{uninitialized}} } void glob_invalid_index4(void) { int x = 3, y = 2; - int res = glob_arr2[x][y]; // expected-warning{{garbage or undefined}} + int res = glob_arr2[x][y]; // expected-warning{{uninitialized}} } const int glob_arr_no_init[10]; @@ -106,12 +106,12 @@ void glob_arr_index5(void) { void glob_invalid_index5(void) { int x = 42; - int res = glob_arr3[x]; // expected-warning{{garbage or undefined}} + int res = glob_arr3[x]; // expected-warning{{uninitialized}} } void glob_invalid_index6(void) { int x = -42; - int res = glob_arr3[x]; // expected-warning{{garbage or undefined}} + int res = glob_arr3[x]; // expected-warning{{uninitialized}} } const int glob_arr4[]; // IncompleteArrayType @@ -126,10 +126,10 @@ void glob_arr_index6(void) { void glob_invalid_index7(void) { int x = 42; - int res = glob_arr4[x]; // expected-warning{{garbage or undefined}} + int res = glob_arr4[x]; // expected-warning{{uninitialized}} } void glob_invalid_index8(void) { int x = -42; - int res = glob_arr4[x]; // expected-warning{{garbage or undefined}} + int res = glob_arr4[x]; // expected-warning{{uninitialized}} } diff --git a/clang/test/Analysis/initialization.cpp b/clang/test/Analysis/initialization.cpp index e624ef5bae9e9..e5e19daad0895 100644 --- a/clang/test/Analysis/initialization.cpp +++ b/clang/test/Analysis/initialization.cpp @@ -24,7 +24,7 @@ void glob_array_index1() { void glob_invalid_index1() { const int *ptr = glob_arr1; int idx = -42; - auto x = ptr[idx]; // expected-warning{{garbage or undefined}} + auto x = ptr[idx]; // expected-warning{{uninitialized}} } void glob_symbolic_index1(int idx) { @@ -44,13 +44,13 @@ void glob_ptr_index1() { void glob_invalid_index2() { const int *ptr = glob_arr2; int idx = 42; - auto x = ptr[idx]; // expected-warning{{garbage or undefined}} + auto x = ptr[idx]; // expected-warning{{uninitialized}} } const float glob_arr3[] = { 0.0000, 0.0235, 0.0470, 0.0706, 0.0941, 0.1176}; float no_warn_garbage_value() { - return glob_arr3[0]; // no-warning (garbage or undefined) + return glob_arr3[0]; // no-warning (not meaningful) } int const glob_arr4[4][2] = {}; @@ -62,13 +62,13 @@ void glob_array_index2() { void glob_invalid_index3() { int idx = -42; - auto x = glob_arr4[1][idx]; // expected-warning{{garbage or undefined}} + auto x = glob_arr4[1][idx]; // expected-warning{{uninitialized}} } void glob_invalid_index4() { const int *ptr = glob_arr4[1]; int idx = -42; - auto x = ptr[idx]; // expected-warning{{garbage or undefined}} + auto x = ptr[idx]; // expected-warning{{uninitialized}} } int const glob_arr5[4][2] = {{1}, 3, 4, 5}; @@ -94,13 +94,13 @@ void glob_ptr_index2() { void glob_invalid_index5() { int idx = -42; - auto x = glob_arr5[1][idx]; // expected-warning{{garbage or undefined}} + auto x = glob_arr5[1][idx]; // expected-warning{{uninitialized}} } void glob_invalid_index6() { int const *ptr = &glob_arr5[1][0]; int idx = 42; - auto x = ptr[idx]; // expected-warning{{garbage or undefined}} + auto x = ptr[idx]; // expected-warning{{uninitialized}} } extern const int glob_arr_no_init[10]; @@ -138,13 +138,13 @@ void glob_ptr_index3() { void glob_invalid_index7() { int idx = -42; - auto x = glob_arr6[idx]; // expected-warning{{garbage or undefined}} + auto x = glob_arr6[idx]; // expected-warning{{uninitialized}} } void glob_invalid_index8() { const char *ptr = glob_arr6; int idx = 42; - auto x = ptr[idx]; // expected-warning{{garbage or undefined}} + auto x = ptr[idx]; // expected-warning{{uninitialized}} } char const glob_arr7[5] = {"123"}; @@ -158,13 +158,13 @@ void glob_array_index6() { void glob_invalid_index9() { int idx = -42; - auto x = glob_arr7[idx]; // expected-warning{{garbage or undefined}} + auto x = glob_arr7[idx]; // expected-warning{{uninitialized}} } void glob_invalid_index10() { const char *ptr = glob_arr7; int idx = 42; - auto x = ptr[idx]; // expected-warning{{garbage or undefined}} + auto x = ptr[idx]; // expected-warning{{uninitialized}} } char const *const glob_ptr8 = "123"; @@ -180,12 +180,12 @@ void glob_ptr_index4() { void glob_invalid_index11() { int idx = -42; - auto x = glob_ptr8[idx]; // expected-warning{{garbage or undefined}} + auto x = glob_ptr8[idx]; // expected-warning{{uninitialized}} } void glob_invalid_index12() { int idx = 42; - // FIXME: Should warn {{garbage or undefined}} + // FIXME: Should warn {{uninitialized}} // We should take into account a declaration in which the literal is used. auto x = glob_ptr8[idx]; // no-warning } diff --git a/clang/test/Analysis/kmalloc-linux.c b/clang/test/Analysis/kmalloc-linux.c index 0114c4ef000e2..83181c15447a9 100644 --- a/clang/test/Analysis/kmalloc-linux.c +++ b/clang/test/Analysis/kmalloc-linux.c @@ -40,7 +40,7 @@ void test_nonzero(void) { return; for (i = 0; i < 10; i++) { - t = list[i]; // expected-warning{{undefined}} + t = list[i]; // expected-warning{{uninitialized}} foo(t); } kfree(list); @@ -55,7 +55,7 @@ void test_indeterminate(int flags) { return; for (i = 0; i < 10; i++) { - t = list[i]; // expected-warning{{undefined}} + t = list[i]; // expected-warning{{uninitialized}} foo(t); } kfree(list); @@ -93,7 +93,7 @@ void test_3arg_malloc_nonzero(struct malloc_type *mtp) { return; for (i = 0; i < 10; i++) { - t = list[i]; // expected-warning{{undefined}} + t = list[i]; // expected-warning{{uninitialized}} foo(t); } kfree(list); @@ -108,7 +108,7 @@ void test_3arg_malloc_indeterminate(struct malloc_type *mtp, int flags) { return; for (i = 0; i < 10; i++) { - t = list[i]; // expected-warning{{undefined}} + t = list[i]; // expected-warning{{uninitialized}} foo(t); } kfree(list); diff --git a/clang/test/Analysis/malloc-annotations.c b/clang/test/Analysis/malloc-annotations.c index c601a0383d221..3a8b1b2842d07 100644 --- a/clang/test/Analysis/malloc-annotations.c +++ b/clang/test/Analysis/malloc-annotations.c @@ -244,7 +244,7 @@ void mallocCastToFP(void) { // This tests that malloc() buffers are undefined by default char mallocGarbage (void) { char *buf = malloc(2); - char result = buf[1]; // expected-warning{{undefined}} + char result = buf[1]; // expected-warning{{uninitialized}} free(buf); return result; } diff --git a/clang/test/Analysis/malloc.c b/clang/test/Analysis/malloc.c index 0dc667bc1ed50..27a04ff873521 100644 --- a/clang/test/Analysis/malloc.c +++ b/clang/test/Analysis/malloc.c @@ -735,7 +735,7 @@ void mallocCastToFP(void) { // This tests that 'malloc()' buffers are undefined by default char mallocGarbage (void) { char *buf = malloc(2); - char result = buf[1]; // expected-warning{{undefined}} + char result = buf[1]; // expected-warning{{uninitialized}} free(buf); return result; } diff --git a/clang/test/Analysis/misc-ps.c b/clang/test/Analysis/misc-ps.c index d2f73ecb23082..02d11eab0619e 100644 --- a/clang/test/Analysis/misc-ps.c +++ b/clang/test/Analysis/misc-ps.c @@ -15,7 +15,7 @@ int rdar93730392(void) { int extra = (2 + foo_rdar9373039 ("Clang") + ((4 - ((unsigned int) (2 + foo_rdar9373039 ("Clang")) % 4)) % 4)) + (2 + foo_rdar9373039 ("1.0") + ((4 - ((unsigned int) (2 + foo_rdar9373039 ("1.0")) % 4)) % 4)); // expected-warning {{never read}} for (int i = 0 ; i < size_rdar9373039 ; ++i) - j += x; // expected-warning {{garbage}} + j += x; // expected-warning {{uninitialized}} return j; } @@ -156,7 +156,7 @@ int rdar_12075238_(unsigned long count) { // Test that we handle an uninitialized value within a logical expression. void PR14635(int *p) { int a = 0, b; - *p = a || b; // expected-warning {{Assigned value is garbage or undefined}} + *p = a || b; // expected-warning {{Assigned value is uninitialized}} } // Test handling floating point values with unary '!'. diff --git a/clang/test/Analysis/operator-calls.cpp b/clang/test/Analysis/operator-calls.cpp index 64abda150c5a1..a89624d44ac42 100644 --- a/clang/test/Analysis/operator-calls.cpp +++ b/clang/test/Analysis/operator-calls.cpp @@ -121,16 +121,16 @@ namespace SynthesizedAssignment { void testNoWarning() { B v, u; - u = v; // expected-warning@110{{Assigned value is garbage or undefined}} + u = v; // expected-warning@110{{Assigned value is uninitialized}} // expected-note@-1{{Calling defaulted copy assignment operator for 'B'}} - // expected-note@110{{Assigned value is garbage or undefined}} + // expected-note@110{{Assigned value is uninitialized}} } void testNoWarningMove() { B v, u; - u = static_cast<B &&>(v); // expected-warning@111{{Assigned value is garbage or undefined}} + u = static_cast<B &&>(v); // expected-warning@111{{Assigned value is uninitialized}} // expected-note@-1{{Calling defaulted move assignment operator for 'B'}} - // expected-note@111{{Assigned value is garbage or undefined}} + // expected-note@111{{Assigned value is uninitialized}} } void testConsistency() { diff --git a/clang/test/Analysis/stack-addr-ps.cpp b/clang/test/Analysis/stack-addr-ps.cpp index 2e509f358b49f..0ca7b07414306 100644 --- a/clang/test/Analysis/stack-addr-ps.cpp +++ b/clang/test/Analysis/stack-addr-ps.cpp @@ -118,7 +118,7 @@ struct TS { }; int* f5() { - int& i = i; // expected-warning {{Assigned value is garbage or undefined}} expected-warning{{reference 'i' is not yet bound to a value when used within its own initialization}} + int& i = i; // expected-warning {{Assigned value is uninitialized}} expected-warning{{reference 'i' is not yet bound to a value when used within its own initialization}} return &i; } diff --git a/clang/test/Analysis/undef-buffers.c b/clang/test/Analysis/undef-buffers.c index 993b08e8e5fd7..2cb8538321b48 100644 --- a/clang/test/Analysis/undef-buffers.c +++ b/clang/test/Analysis/undef-buffers.c @@ -34,7 +34,7 @@ char stackBased3 (int *x) { char heapBased1 (void) { char *buf = malloc(2); buf[0] = 'a'; - char result = buf[1]; // expected-warning{{undefined}} + char result = buf[1]; // expected-warning{{uninitialized}} free(buf); return result; } @@ -42,7 +42,7 @@ char heapBased1 (void) { char heapBased2 (void) { char *buf = malloc(2); buf[1] = 'a'; - char result = buf[0]; // expected-warning{{undefined}} + char result = buf[0]; // expected-warning{{uninitialized}} free(buf); return result; } diff --git a/clang/test/Analysis/uninit-const.c b/clang/test/Analysis/uninit-const.c index 06fca22c83c6d..1ddf2c89ae59a 100644 --- a/clang/test/Analysis/uninit-const.c +++ b/clang/test/Analysis/uninit-const.c @@ -94,8 +94,8 @@ void f_6_1(void) { void f_7(void) { int z; // expected-note {{'z' declared without an initial value}} - int y=z; // expected-warning {{Assigned value is garbage or undefined}} - // expected-note@-1 {{Assigned value is garbage or undefined}} + int y=z; // expected-warning {{Assigned value is uninitialized}} + // expected-note@-1 {{Assigned value is uninitialized}} doStuff3(y); } @@ -133,26 +133,26 @@ void f_12(void) { // https://bugs.llvm.org/show_bug.cgi?id=35419 void f11_0(void) { int x; // expected-note {{'x' declared without an initial value}} - x++; // expected-warning {{The expression is an uninitialized value. The computed value will also be garbage}} - // expected-note@-1 {{The expression is an uninitialized value. The computed value will also be garbage}} + x++; // expected-warning {{The expression uses uninitialized memory}} + // expected-note@-1 {{The expression uses uninitialized memory}} clang_analyzer_warnIfReached(); // no-warning } void f11_1(void) { int x; // expected-note {{'x' declared without an initial value}} - ++x; // expected-warning {{The expression is an uninitialized value. The computed value will also be garbage}} - // expected-note@-1 {{The expression is an uninitialized value. The computed value will also be garbage}} + ++x; // expected-warning {{The expression uses uninitialized memory}} + // expected-note@-1 {{The expression uses uninitialized memory}} clang_analyzer_warnIfReached(); // no-warning } void f11_2(void) { int x; // expected-note {{'x' declared without an initial value}} - x--; // expected-warning {{The expression is an uninitialized value. The computed value will also be garbage}} - // expected-note@-1 {{The expression is an uninitialized value. The computed value will also be garbage}} + x--; // expected-warning {{The expression uses uninitialized memory}} + // expected-note@-1 {{The expression uses uninitialized memory}} clang_analyzer_warnIfReached(); // no-warning } void f11_3(void) { int x; // expected-note {{'x' declared without an initial value}} - --x; // expected-warning {{The expression is an uninitialized value. The computed value will also be garbage}} - // expected-note@-1 {{The expression is an uninitialized value. The computed value will also be garbage}} + --x; // expected-warning {{The expression uses uninitialized memory}} + // expected-note@-1 {{The expression uses uninitialized memory}} clang_analyzer_warnIfReached(); // no-warning } diff --git a/clang/test/Analysis/uninit-const.cpp b/clang/test/Analysis/uninit-const.cpp index 3ffcda1294abb..2ad833b3613fb 100644 --- a/clang/test/Analysis/uninit-const.cpp +++ b/clang/test/Analysis/uninit-const.cpp @@ -68,11 +68,11 @@ int& f6_1_sub(int &p) { void f6_1(void) { int t; // expected-note{{'t' declared without an initial value}} - int p = f6_1_sub(t); //expected-warning {{Assigned value is garbage or undefined}} + int p = f6_1_sub(t); //expected-warning {{Assigned value is uninitialized}} //expected-note@-1 {{Passing value via 1st parameter 'p'}} //expected-note@-2 {{Calling 'f6_1_sub'}} //expected-note@-3 {{Returning from 'f6_1_sub'}} - //expected-note@-4 {{Assigned value is garbage or undefined}} + //expected-note@-4 {{Assigned value is uninitialized}} int q = p; doStuff6(q); } diff --git a/clang/test/Analysis/uninit-structured-binding-array.cpp b/clang/test/Analysis/uninit-structured-binding-array.cpp index ed5439492818b..b7bfed9eac8b7 100644 --- a/clang/test/Analysis/uninit-structured-binding-array.cpp +++ b/clang/test/Analysis/uninit-structured-binding-array.cpp @@ -7,7 +7,7 @@ void array_value_a(void) { auto [a, b] = arr; arr[0] = 0; - int x = a; // expected-warning{{Assigned value is garbage or undefined}} + int x = a; // expected-warning{{Assigned value is uninitialized}} } void array_value_b(void) { @@ -30,7 +30,7 @@ void array_value_c(void) { clang_analyzer_eval(b == arr[1]); // expected-warning{{TRUE}} int y = b; // no-warning - int x = a; // expected-warning{{Assigned value is garbage or undefined}} + int x = a; // expected-warning{{Assigned value is uninitialized}} } void array_value_d(void) { @@ -43,7 +43,7 @@ void array_value_d(void) { clang_analyzer_eval(b == arr[1]); // expected-warning{{TRUE}} int y = b; // no-warning - int x = c; // expected-warning{{Assigned value is garbage or undefined}} + int x = c; // expected-warning{{Assigned value is uninitialized}} } void array_value_e(void) { @@ -72,13 +72,13 @@ void array_value_f(void) { clang_analyzer_eval(i == 0); // expected-warning{{TRUE}} int a = i; // no-warning - int b = j; // expected-warning{{Assigned value is garbage or undefined}} + int b = j; // expected-warning{{Assigned value is uninitialized}} } void array_lref_a(void) { int arr[2]; auto &[a, b] = arr; - int x = a; // expected-warning{{Assigned value is garbage or undefined}} + int x = a; // expected-warning{{Assigned value is uninitialized}} } void array_lref_b(void) { @@ -100,7 +100,7 @@ void array_lref_c(void) { clang_analyzer_eval(a == 1); // expected-warning{{TRUE}} int x = a; // no-warning - int y = b; // expected-warning{{Assigned value is garbage or undefined}} + int y = b; // expected-warning{{Assigned value is uninitialized}} } void array_lref_d(void) { @@ -113,7 +113,7 @@ void array_lref_d(void) { clang_analyzer_eval(b == 1); // expected-warning{{TRUE}} int y = b; // no-warning - int x = a; // expected-warning{{Assigned value is garbage or undefined}} + int x = a; // expected-warning{{Assigned value is uninitialized}} } void array_lref_e(void) { @@ -126,7 +126,7 @@ void array_lref_e(void) { clang_analyzer_eval(b == 1); // expected-warning{{TRUE}} int y = b; // no-warning - int x = c; // expected-warning{{Assigned value is garbage or undefined}} + int x = c; // expected-warning{{Assigned value is uninitialized}} } void array_lref_f(void) { @@ -155,13 +155,13 @@ void array_lref_g(void) { clang_analyzer_eval(i == 0); // expected-warning{{TRUE}} int a = i; // no-warning - int b = j; // expected-warning{{Assigned value is garbage or undefined}} + int b = j; // expected-warning{{Assigned value is uninitialized}} } void array_rref_a(void) { int arr[2]; auto &&[a, b] = arr; - int x = a; // expected-warning{{Assigned value is garbage or undefined}} + int x = a; // expected-warning{{Assigned value is uninitialized}} } void array_rref_b(void) { @@ -183,7 +183,7 @@ void array_rref_c(void) { clang_analyzer_eval(a == 1); // expected-warning{{TRUE}} int x = a; // no-warning - int y = b; // expected-warning{{Assigned value is garbage or undefined}} + int y = b; // expected-warning{{Assigned value is uninitialized}} } void array_rref_d(void) { @@ -196,7 +196,7 @@ void array_rref_d(void) { clang_analyzer_eval(b == 1); // expected-warning{{TRUE}} int y = b; // no-warning - int x = a; // expected-warning{{Assigned value is garbage or undefined}} + int x = a; // expected-warning{{Assigned value is uninitialized}} } void array_rref_e(void) { @@ -209,7 +209,7 @@ void array_rref_e(void) { clang_analyzer_eval(b == 1); // expected-warning{{TRUE}} int y = b; // no-warning - int x = c; // expected-warning{{Assigned value is garbage or undefined}} + int x = c; // expected-warning{{Assigned value is uninitialized}} } void array_rref_f(void) { @@ -238,7 +238,7 @@ void array_rref_g(void) { clang_analyzer_eval(i == 0); // expected-warning{{TRUE}} int a = i; // no-warning - int b = j; // expected-warning{{Assigned value is garbage or undefined}} + int b = j; // expected-warning{{Assigned value is uninitialized}} } void array_change_a(void) { @@ -276,7 +276,7 @@ void array_small_a(void) { auto [a, b, c, d, e] = arr; - int x = e; // expected-warning{{Assigned value is garbage or undefined}} + int x = e; // expected-warning{{Assigned value is uninitialized}} } void array_big_a(void) { diff --git a/clang/test/Analysis/uninit-structured-binding-struct.cpp b/clang/test/Analysis/uninit-structured-binding-struct.cpp index fec82c0d8589d..19bc7b2034d3b 100644 --- a/clang/test/Analysis/uninit-structured-binding-struct.cpp +++ b/clang/test/Analysis/uninit-structured-binding-struct.cpp @@ -12,7 +12,7 @@ void a(void) { auto [i, j] = tst; - int x = i; // expected-warning{{Assigned value is garbage or undefined}} + int x = i; // expected-warning{{Assigned value is uninitialized}} } void b(void) { @@ -22,7 +22,7 @@ void b(void) { auto [i, j] = tst; clang_analyzer_eval(i == 1); // expected-warning{{TRUE}} - int y = j; // expected-warning{{Assigned value is garbage or undefined}} + int y = j; // expected-warning{{Assigned value is uninitialized}} } void c(void) { @@ -30,7 +30,7 @@ void c(void) { auto &[i, j] = tst; - int x = i; // expected-warning{{Assigned value is garbage or undefined}} + int x = i; // expected-warning{{Assigned value is uninitialized}} } void d(void) { @@ -43,7 +43,7 @@ void d(void) { i = 2; clang_analyzer_eval(tst.a == 2); // expected-warning{{TRUE}} - int y = j; // expected-warning{{Assigned value is garbage or undefined}} + int y = j; // expected-warning{{Assigned value is uninitialized}} } void e(void) { @@ -63,7 +63,7 @@ void f(void) { auto &&[i, j] = tst; - int x = i; // expected-warning{{Assigned value is garbage or undefined}} + int x = i; // expected-warning{{Assigned value is uninitialized}} } void g(void) { @@ -73,7 +73,7 @@ void g(void) { auto &&[i, j] = tst; clang_analyzer_eval(i == 1); // expected-warning{{TRUE}} - int y = j; // expected-warning{{Assigned value is garbage or undefined}} + int y = j; // expected-warning{{Assigned value is uninitialized}} } struct s2 { diff --git a/clang/test/Analysis/uninit-structured-binding-tuple.cpp b/clang/test/Analysis/uninit-structured-binding-tuple.cpp index bc5644474fc98..057d002d4d75e 100644 --- a/clang/test/Analysis/uninit-structured-binding-tuple.cpp +++ b/clang/test/Analysis/uninit-structured-binding-tuple.cpp @@ -525,7 +525,7 @@ void uninit_a(void) { auto [a, b] = u; - int x = a; // expected-warning{{Assigned value is garbage or undefined}} + int x = a; // expected-warning{{Assigned value is uninitialized}} } void uninit_b(void) { @@ -533,7 +533,7 @@ void uninit_b(void) { auto [a, b] = u; - int x = b; // expected-warning{{Assigned value is garbage or undefined}} + int x = b; // expected-warning{{Assigned value is uninitialized}} } GENERATE_TUPLE_LIKE_STRUCT(UninitCall, int); diff --git a/clang/test/Analysis/uninit-vals.m b/clang/test/Analysis/uninit-vals.m index a6ec4fb74e128..eef2600b97f56 100644 --- a/clang/test/Analysis/uninit-vals.m +++ b/clang/test/Analysis/uninit-vals.m @@ -34,8 +34,8 @@ void test_uninit_pos(void) { struct TestUninit v1 = { 0, 0 }; struct TestUninit v2 = test_uninit_aux(); int z; // expected-note{{'z' declared without an initial value}} - v1.y = z; // expected-warning{{Assigned value is garbage or undefined}} - // expected-note@-1{{Assigned value is garbage or undefined}} + v1.y = z; // expected-warning{{Assigned value is uninitialized}} + // expected-note@-1{{Assigned value is uninitialized}} test_unit_aux2(v2.x + v1.y); } void test_uninit_pos_2(void) { @@ -78,8 +78,8 @@ void testFoo(Foo *o) { void rdar_7780304(void) { typedef struct s_r7780304 { int x; } s_r7780304; s_r7780304 b; - b.x |= 1; // expected-warning{{The left expression of the compound assignment is an uninitialized value. The computed value will also be garbage}} - // expected-note@-1{{The left expression of the compound assignment is an uninitialized value. The computed value will also be garbage}} + b.x |= 1; // expected-warning{{The left expression of the compound assignment uses uninitialized memory}} + // expected-note@-1{{The left expression of the compound assignment uses uninitialized memory}} } diff --git a/clang/test/Analysis/zero-size-non-pod-array.cpp b/clang/test/Analysis/zero-size-non-pod-array.cpp index a2117bc80eac8..628be0d7896e0 100644 --- a/clang/test/Analysis/zero-size-non-pod-array.cpp +++ b/clang/test/Analysis/zero-size-non-pod-array.cpp @@ -124,7 +124,7 @@ void zeroSizeArrayLambdaCaptureUndefined1() { int n; auto l = [arr, n]{ - int x = n; //expected-warning{{Assigned value is garbage or undefined}} + int x = n; //expected-warning{{Assigned value is uninitialized}} (void) x; }; @@ -137,7 +137,7 @@ void zeroSizeArrayLambdaCaptureUndefined2() { int n; [arr, n]{ - int x = n; //expected-warning{{Assigned value is garbage or undefined}} + int x = n; //expected-warning{{Assigned value is uninitialized}} (void) x; }(); } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits