Author: jedav Date: 2026-10-05T22:50:53Z New Revision: 75549ee73b42592132493230fe8765780e1b12b7
URL: https://github.com/llvm/llvm-project/commit/75549ee73b42592132493230fe8765780e1b12b7 DIFF: https://github.com/llvm/llvm-project/commit/75549ee73b42592132493230fe8765780e1b12b7.diff LOG: [clang] Precommit test for auto-init of small struct fields (#229225) Currently when using the -ftrivial-auto-var-init-max-size flag, record types are either fully initialized if they are smaller than the max size, or left fully uninitialized even if they have individual fields smaller than the max size. This change extends existing tests for auto-init max size to cover the case where a struct contains a struct containing a small field, in preparation for changes to automatically initialize small fields inside structs. Added: Modified: clang/test/CodeGenCXX/auto-var-init-max-size.cpp Removed: ################################################################################ diff --git a/clang/test/CodeGenCXX/auto-var-init-max-size.cpp b/clang/test/CodeGenCXX/auto-var-init-max-size.cpp index 25c30c383332b..ce8f0337c528b 100644 --- a/clang/test/CodeGenCXX/auto-var-init-max-size.cpp +++ b/clang/test/CodeGenCXX/auto-var-init-max-size.cpp @@ -9,10 +9,15 @@ // RUN: %clang_cc1 -triple x86_64-unknown-unknown -ftrivial-auto-var-init=zero -ftrivial-auto-var-init-max-size=4096 %s -emit-llvm -o - | FileCheck -check-prefix=ZERO-COMMON -check-prefix=ZERO-MAX-4096 %s struct Foo { - int x; // we should try to make sure X is initialized. + int x; // TODO we should try to make sure X is initialized. char buff[1024]; // this one is fine to skip }; +struct Bar { + struct Foo f1; // TODO x in Foo should be initialized. + int y; // TODO y should be initialized. +}; + int foo(unsigned n) { bool var_size_1; long var_size_8_init = 123; @@ -20,7 +25,7 @@ int foo(unsigned n) { long var_size_8_init_later; void *var_size_8p; int var_size_1024[256]; - Foo var_size_1028; + Bar var_size_1032; int var_size_4096[1024]; // VLA, non-constant size int var_vla[n]; @@ -29,13 +34,13 @@ int foo(unsigned n) { var_size_8_init_later = 456; // There are 10 variables: var_size_1, var_size_8_init, var_size_8_noinit, // var_size_8_init_later, var_size_8p, var_size_1024, - // var_size_1028, var_size_4096, var_vla, and a builtin anonymous var ("%5"). + // var_size_1032, var_size_4096, var_vla, and a builtin anonymous var ("%5"). // - Doesn't need auto-init: var_size_8_init // - COMMON (auto-init regardless of the max size): "var_vla", and "%5" // - Max size 1: "var_size_1" // - Max size 1024: "var_size_1", "var_size_8_noinit", "var_size_8_init_later", "var_size_8p", "var_size_1024" // - Max size 4096: "var_size_1", "var_size_8_noinit", "var_size_8_init_later", "var_size_8p", "var_size_1024", - // "var_size_1028", "var_size_4096" + // "var_size_1032", "var_size_4096" // // PATTERN-MAX-1: store i8 -86, ptr %var_size_1, align 1, !annotation [[AUTO_INIT:!.+]] // PATTERN-MAX-1-NEXT: store i64 123, ptr %var_size_8_init, align 8 @@ -43,7 +48,7 @@ int foo(unsigned n) { // PATTERN-MAX-1-NOT: store i64 -6148914691236517206, ptr %var_size_8_init_later, align 8, !annotation [[AUTO_INIT:!.+]] // PATTERN-MAX-1-NOT: store ptr inttoptr (i64 -6148914691236517206 to ptr), ptr %var_size_8p, align 8, !annotation [[AUTO_INIT:!.+]] // PATTERN-MAX-1-NOT: call void @llvm.memset.p0.i64(ptr align 16 %var_size_1024, i8 -86, i64 1024, i1 false), !annotation [[AUTO_INIT:!.+]] - // PATTERN-MAX-1-NOT: call void @llvm.memset.p0.i64(ptr align 4 %var_size_1028, i8 -86, i64 1028, i1 false), !annotation [[AUTO_INIT:!.+]] + // PATTERN-MAX-1-NOT: call void @llvm.memset.p0.i64(ptr align 4 %var_size_1032, i8 -86, i64 1032, i1 false), !annotation [[AUTO_INIT:!.+]] // PATTERN-MAX-1-NOT: call void @llvm.memset.p0.i64(ptr align 16 %var_size_4096, i8 -86, i64 4096, i1 false), !annotation [[AUTO_INIT:!.+]] // PATTERN-MAX-1024: store i8 -86, ptr %var_size_1, align 1, !annotation [[AUTO_INIT:!.+]] @@ -52,7 +57,7 @@ int foo(unsigned n) { // PATTERN-MAX-1024: store i64 -6148914691236517206, ptr %var_size_8_init_later, align 8, !annotation [[AUTO_INIT:!.+]] // PATTERN-MAX-1024: store ptr inttoptr (i64 -6148914691236517206 to ptr), ptr %var_size_8p, align 8, !annotation [[AUTO_INIT:!.+]] // PATTERN-MAX-1024: call void @llvm.memset.p0.i64(ptr align 16 %var_size_1024, i8 -86, i64 1024, i1 false), !annotation [[AUTO_INIT:!.+]] - // PATTERN-MAX-1024-NOT: call void @llvm.memset.p0.i64(ptr align 4 %var_size_1028, i8 -86, i64 1028, i1 false), !annotation [[AUTO_INIT:!.+]] + // PATTERN-MAX-1024-NOT: call void @llvm.memset.p0.i64(ptr align 4 %var_size_1032, i8 -86, i64 1032, i1 false), !annotation [[AUTO_INIT:!.+]] // PATTERN-MAX-1024-NOT: call void @llvm.memset.p0.i64(ptr align 16 %var_size_4096, i8 -86, i64 4096, i1 false), !annotation [[AUTO_INIT:!.+]] // PATTERN-MAX-4096: store i8 -86, ptr %var_size_1, align 1, !annotation [[AUTO_INIT:!.+]] @@ -61,7 +66,7 @@ int foo(unsigned n) { // PATTERN-MAX-4096: store i64 -6148914691236517206, ptr %var_size_8_init_later, align 8, !annotation [[AUTO_INIT:!.+]] // PATTERN-MAX-4096: store ptr inttoptr (i64 -6148914691236517206 to ptr), ptr %var_size_8p, align 8, !annotation [[AUTO_INIT:!.+]] // PATTERN-MAX-4096: call void @llvm.memset.p0.i64(ptr align 16 %var_size_1024, i8 -86, i64 1024, i1 false), !annotation [[AUTO_INIT:!.+]] - // PATTERN-MAX-4096: call void @llvm.memset.p0.i64(ptr align 4 %var_size_1028, i8 -86, i64 1028, i1 false), !annotation [[AUTO_INIT:!.+]] + // PATTERN-MAX-4096: call void @llvm.memset.p0.i64(ptr align 4 %var_size_1032, i8 -86, i64 1032, i1 false), !annotation [[AUTO_INIT:!.+]] // PATTERN-MAX-4096: call void @llvm.memset.p0.i64(ptr align 16 %var_size_4096, i8 -86, i64 4096, i1 false), !annotation [[AUTO_INIT:!.+]] // PATTERN-COMMON: call void @llvm.memcpy.p0.p0.i64(ptr align 4 %vla.cur, ptr align 4 @__const._Z3fooj.var_vla, i64 4, i1 false), !annotation [[AUTO_INIT:!.+]] @@ -73,7 +78,7 @@ int foo(unsigned n) { // ZERO-MAX-1-NOT: store i64 0, ptr %var_size_8_init_later, align 8, !annotation [[AUTO_INIT:!.+]] // ZERO-MAX-1-NOT: store ptr null, ptr %var_size_8p, align 8, !annotation [[AUTO_INIT:!.+]] // ZERO-MAX-1-NOT: call void @llvm.memset.p0.i64(ptr align 16 %var_size_1024, i8 0, i64 1024, i1 false), !annotation [[AUTO_INIT:!.+]] - // ZERO-MAX-1-NOT: call void @llvm.memset.p0.i64(ptr align 4 %var_size_1028, i8 0, i64 1028, i1 false), !annotation [[AUTO_INIT:!.+]] + // ZERO-MAX-1-NOT: call void @llvm.memset.p0.i64(ptr align 4 %var_size_1032, i8 0, i64 1032, i1 false), !annotation [[AUTO_INIT:!.+]] // ZERO-MAX-1-NOT: call void @llvm.memset.p0.i64(ptr align 16 %var_size_4096, i8 0, i64 4096, i1 false), !annotation [[AUTO_INIT:!.+]] // ZERO-MAX-1024: store i8 0, ptr %var_size_1, align 1, !annotation [[AUTO_INIT:!.+]] @@ -82,7 +87,7 @@ int foo(unsigned n) { // ZERO-MAX-1024: store i64 0, ptr %var_size_8_init_later, align 8, !annotation [[AUTO_INIT:!.+]] // ZERO-MAX-1024: store ptr null, ptr %var_size_8p, align 8, !annotation [[AUTO_INIT:!.+]] // ZERO-MAX-1024: call void @llvm.memset.p0.i64(ptr align 16 %var_size_1024, i8 0, i64 1024, i1 false), !annotation [[AUTO_INIT:!.+]] - // ZERO-MAX-1024-NOT: call void @llvm.memset.p0.i64(ptr align 4 %var_size_1028, i8 0, i64 1028, i1 false), !annotation [[AUTO_INIT:!.+]] + // ZERO-MAX-1024-NOT: call void @llvm.memset.p0.i64(ptr align 4 %var_size_1032, i8 0, i64 1032, i1 false), !annotation [[AUTO_INIT:!.+]] // ZERO-MAX-1024-NOT: call void @llvm.memset.p0.i64(ptr align 16 %var_size_4096, i8 0, i64 4096, i1 false), !annotation [[AUTO_INIT:!.+]] // ZERO-MAX-4096: store i8 0, ptr %var_size_1, align 1, !annotation [[AUTO_INIT:!.+]] @@ -91,7 +96,7 @@ int foo(unsigned n) { // ZERO-MAX-4096: store i64 0, ptr %var_size_8_init_later, align 8, !annotation [[AUTO_INIT:!.+]] // ZERO-MAX-4096: store ptr null, ptr %var_size_8p, align 8, !annotation [[AUTO_INIT:!.+]] // ZERO-MAX-4096: call void @llvm.memset.p0.i64(ptr align 16 %var_size_1024, i8 0, i64 1024, i1 false), !annotation [[AUTO_INIT:!.+]] - // ZERO-MAX-4096: call void @llvm.memset.p0.i64(ptr align 4 %var_size_1028, i8 0, i64 1028, i1 false), !annotation [[AUTO_INIT:!.+]] + // ZERO-MAX-4096: call void @llvm.memset.p0.i64(ptr align 4 %var_size_1032, i8 0, i64 1032, i1 false), !annotation [[AUTO_INIT:!.+]] // ZERO-MAX-4096: call void @llvm.memset.p0.i64(ptr align 16 %var_size_4096, i8 0, i64 4096, i1 false), !annotation [[AUTO_INIT:!.+]] // ZERO-COMMON: call void @llvm.memset.p0.i64(ptr align 16 %vla, i8 0, i64 %3, i1 false), !annotation [[AUTO_INIT:!.+]] _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
