Re: Ping [PATCH V2] libcpp: Optimize #pragma once with a hash table [PR58770]
On Fri, 2022-08-19 at 13:27 -0700, Paul Hollinsky wrote: > Hi all, > > Would love some feedback on this patch! > > Thanks, > Paul Hi Paul. Sorry for not getting back to you before. I'm listed as a libcpp maintainer, but this happens to be a part of libcpp I've not looked at (I'm mostly just familiar with location_t management). FWIW, the patch seems sane to me, though I have one concern: does it work with precompiled headers? (given that PCH is implemented by taking a snapshot of the gc heap and reconstructing it on load, it thus tends to be an annoying source of bugs when trying the kind of cleanup this patch is doing). Sorry to not look be able to look at things in more detail (I'm travelling) Hope this is constructive Dave > > On Mon, Aug 01, 2022 at 05:18:40AM +, Paul Hollinsky wrote: > > Rather than traversing the all_files linked list for every include, > > this factors out the quick idempotency checks (modification time > > and size) to be the keys in a hash table so we can find matching > > files quickly. > > > > The hash table value type is a linked list, in case more than one > > file matches the quick check. > > > > The table is only built if a once-only file is seen, so include > > guard performance is not affected. > > > > My laptop would previously complete Ricardo's benchmark from the > > PR in ~1.1s using #pragma once, and ~0.35s using include guards. > > > > After this change, both benchmarks now complete in ~0.35s. I did > > have to randomize the modification dates on the benchmark headers > > so the files did not all end up in the same hash table list, but > > that would likely not come up outside of the contrived benchmark. > > > > I bootstrapped and ran the testsuite on x86_64 Darwin, as well as > > ppc64le and aarch64 Linux. > > > > libcpp/ChangeLog: > > > > PR preprocessor/58770 > > * internal.h: Add hash table for #pragma once > > * files.cc: Optimize #pragma once with the hash table > > > > Signed-off-by: Paul Hollinsky > > --- > > libcpp/files.cc | 116 > > +++--- > > libcpp/internal.h | 3 ++ > > 2 files changed, 112 insertions(+), 7 deletions(-) > > > > diff --git a/libcpp/files.cc b/libcpp/files.cc > > index 24208f7b0f8..d4ffd77578e 100644 > > --- a/libcpp/files.cc > > +++ b/libcpp/files.cc > > @@ -167,6 +167,33 @@ struct file_hash_entry_pool > > struct cpp_file_hash_entry pool[FILE_HASH_POOL_SIZE]; > > }; > > > > +/* A set of attributes designed to quickly identify obviously > > different files > > + in a hashtable. Just in case there are collisions, we still > > maintain a > > + list. These sub-lists can then be checked for #pragma once > > rather than > > + interating through all_files. */ > > +struct file_quick_idempotency_attrs > > +{ > > + file_quick_idempotency_attrs(const _cpp_file *f) > > + : mtime(f->st.st_mtime), size(f->st.st_size) {} > > + > > + time_t mtime; > > + off_t size; > > + > > + static hashval_t hash (/* _cpp_file* */ const void *p); > > +}; > > + > > +/* Sub-list of very similar files kept in a hashtable to check for > > #pragma > > + once. */ > > +struct file_sublist > > +{ > > + _cpp_file *f; > > + file_sublist *next; > > + > > + static int eq (/* _cpp_file* */ const void *p, > > + /* file_sublist* */ const void *q); > > + static void del (/* file_sublist* */ void *p); > > +}; > > + > > static bool open_file (_cpp_file *file); > > static bool pch_open_file (cpp_reader *pfile, _cpp_file *file, > > bool *invalid_pch); > > @@ -849,17 +876,17 @@ has_unique_contents (cpp_reader *pfile, > > _cpp_file *file, bool import, > > if (!pfile->seen_once_only) > > return true; > > > > - /* We may have read the file under a different name. Look > > - for likely candidates and compare file contents to be sure. > > */ > > - for (_cpp_file *f = pfile->all_files; f; f = f->next_file) > > + /* We may have read the file under a different name. We've kept > > + similar looking files in this lists under this hash table, so > > + check those more thoroughly. */ > > + void* ent = htab_find(pfile->pragma_once_files, file); > > + for (file_sublist *e = static_cast (ent); e; e = > > e->next) > > { > > + _cpp_file *f = e->f; > > if (f == file) > > continue; /* It'sa me! */ > > > > - if ((import || f->once_only) > > - && f->err_no == 0 > > - && f->st.st_mtime == file->st.st_mtime > > - && f->st.st_size == file->st.st_size) > > + if ((import || f->once_only) && f->err_no == 0) > > { > > _cpp_file *ref_file; > > > > @@ -895,6 +922,38 @@ has_unique_contents (cpp_reader *pfile, > > _cpp_file *file, bool import, > > return true; > > } > > > > +/* Add the given file to the #pragma once table so it can be > > + quickly identified and excluded the next time it's seen. */ > > +static void > > +update_pragma_
Re: [PATCH] Add ABI test for __bf16 type
On Sat, Aug 20, 2022 at 1:31 AM H.J. Lu wrote: > > On Thu, Aug 18, 2022 at 5:56 PM Hongtao Liu via Gcc-patches > wrote: > > > > On Thu, Aug 18, 2022 at 3:36 PM Haochen Jiang via Gcc-patches > > wrote: > > > > > > Hi all, > > > > > > This patch aims to add bf16 abi test after the whole __bf16 type is added. > > > > > > Regtested on x86_64-pc-linux-gnu. Ok for trunk? > > Ok. > > All BF16 ABI tests failed due to missing __m128bf16/__m256bf16/__m512bf16. > When will __bf16 types be added? It should be already in the trunk. > > > > > > > BRs, > > > Haochen > > > > > > gcc/testsuite/ChangeLog: > > > > > > * gcc.target/x86_64/abi/bf16/abi-bf16.exp: New test. > > > * gcc.target/x86_64/abi/bf16/args.h: Ditto. > > > * gcc.target/x86_64/abi/bf16/asm-support.S: Ditto. > > > * gcc.target/x86_64/abi/bf16/bf16-check.h: Ditto. > > > * gcc.target/x86_64/abi/bf16/bf16-helper.h: Ditto. > > > * gcc.target/x86_64/abi/bf16/defines.h: Ditto. > > > * gcc.target/x86_64/abi/bf16/m256bf16/abi-bf16-ymm.exp: Ditto. > > > * gcc.target/x86_64/abi/bf16/m256bf16/args.h: Ditto. > > > * gcc.target/x86_64/abi/bf16/m256bf16/asm-support.S: Ditto. > > > * gcc.target/x86_64/abi/bf16/m256bf16/bf16-ymm-check.h: Ditto. > > > * gcc.target/x86_64/abi/bf16/m256bf16/test_m256_returning.c: > > > Ditto. > > > * gcc.target/x86_64/abi/bf16/m256bf16/test_passing_m256.c: Ditto. > > > * gcc.target/x86_64/abi/bf16/m256bf16/test_passing_structs.c: > > > Ditto. > > > * gcc.target/x86_64/abi/bf16/m256bf16/test_passing_unions.c: > > > Ditto. > > > * gcc.target/x86_64/abi/bf16/m256bf16/test_varargs-m256.c: Ditto. > > > * gcc.target/x86_64/abi/bf16/m512bf16/abi-bf16-zmm.exp: Ditto. > > > * gcc.target/x86_64/abi/bf16/m512bf16/args.h: Ditto. > > > * gcc.target/x86_64/abi/bf16/m512bf16/asm-support.S: Ditto. > > > * gcc.target/x86_64/abi/bf16/m512bf16/bf16-zmm-check.h: Ditto. > > > * gcc.target/x86_64/abi/bf16/m512bf16/test_m512_returning.c: > > > Ditto. > > > * gcc.target/x86_64/abi/bf16/m512bf16/test_passing_m512.c: Ditto. > > > * gcc.target/x86_64/abi/bf16/m512bf16/test_passing_structs.c: > > > Ditto. > > > * gcc.target/x86_64/abi/bf16/m512bf16/test_passing_unions.c: > > > Ditto. > > > * gcc.target/x86_64/abi/bf16/m512bf16/test_varargs-m512.c: Ditto. > > > * gcc.target/x86_64/abi/bf16/macros.h: Ditto. > > > * gcc.target/x86_64/abi/bf16/test_3_element_struct_and_unions.c: > > > Ditto. > > > * gcc.target/x86_64/abi/bf16/test_basic_alignment.c: Ditto. > > > * gcc.target/x86_64/abi/bf16/test_basic_array_size_and_align.c: > > > Ditto. > > > * gcc.target/x86_64/abi/bf16/test_basic_returning.c: Ditto. > > > * gcc.target/x86_64/abi/bf16/test_basic_sizes.c: Ditto. > > > * gcc.target/x86_64/abi/bf16/test_basic_struct_size_and_align.c: > > > Ditto. > > > * gcc.target/x86_64/abi/bf16/test_basic_union_size_and_align.c: > > > Ditto. > > > * gcc.target/x86_64/abi/bf16/test_m128_returning.c: Ditto. > > > * gcc.target/x86_64/abi/bf16/test_passing_floats.c: Ditto. > > > * gcc.target/x86_64/abi/bf16/test_passing_m128.c: Ditto. > > > * gcc.target/x86_64/abi/bf16/test_passing_structs.c: Ditto. > > > * gcc.target/x86_64/abi/bf16/test_passing_unions.c: Ditto. > > > * gcc.target/x86_64/abi/bf16/test_struct_returning.c: Ditto. > > > * gcc.target/x86_64/abi/bf16/test_varargs-m128.c: Ditto. > > > > -- > H.J. -- BR, Hongtao
Re: [PATCH] Add ABI test for __bf16 type
On Mon, Aug 22, 2022 at 9:02 AM Hongtao Liu wrote: > > On Sat, Aug 20, 2022 at 1:31 AM H.J. Lu wrote: > > > > On Thu, Aug 18, 2022 at 5:56 PM Hongtao Liu via Gcc-patches > > wrote: > > > > > > On Thu, Aug 18, 2022 at 3:36 PM Haochen Jiang via Gcc-patches > > > wrote: > > > > > > > > Hi all, > > > > > > > > This patch aims to add bf16 abi test after the whole __bf16 type is > > > > added. > > > > > > > > Regtested on x86_64-pc-linux-gnu. Ok for trunk? > > > Ok. > > > > All BF16 ABI tests failed due to missing __m128bf16/__m256bf16/__m512bf16. > > When will __bf16 types be added? > It should be already in the trunk. Oh, __m128bf16/__m256bf16/__m512bf16 is not added to the trunk. > > > > > > > > > > BRs, > > > > Haochen > > > > > > > > gcc/testsuite/ChangeLog: > > > > > > > > * gcc.target/x86_64/abi/bf16/abi-bf16.exp: New test. > > > > * gcc.target/x86_64/abi/bf16/args.h: Ditto. > > > > * gcc.target/x86_64/abi/bf16/asm-support.S: Ditto. > > > > * gcc.target/x86_64/abi/bf16/bf16-check.h: Ditto. > > > > * gcc.target/x86_64/abi/bf16/bf16-helper.h: Ditto. > > > > * gcc.target/x86_64/abi/bf16/defines.h: Ditto. > > > > * gcc.target/x86_64/abi/bf16/m256bf16/abi-bf16-ymm.exp: Ditto. > > > > * gcc.target/x86_64/abi/bf16/m256bf16/args.h: Ditto. > > > > * gcc.target/x86_64/abi/bf16/m256bf16/asm-support.S: Ditto. > > > > * gcc.target/x86_64/abi/bf16/m256bf16/bf16-ymm-check.h: Ditto. > > > > * gcc.target/x86_64/abi/bf16/m256bf16/test_m256_returning.c: > > > > Ditto. > > > > * gcc.target/x86_64/abi/bf16/m256bf16/test_passing_m256.c: > > > > Ditto. > > > > * gcc.target/x86_64/abi/bf16/m256bf16/test_passing_structs.c: > > > > Ditto. > > > > * gcc.target/x86_64/abi/bf16/m256bf16/test_passing_unions.c: > > > > Ditto. > > > > * gcc.target/x86_64/abi/bf16/m256bf16/test_varargs-m256.c: > > > > Ditto. > > > > * gcc.target/x86_64/abi/bf16/m512bf16/abi-bf16-zmm.exp: Ditto. > > > > * gcc.target/x86_64/abi/bf16/m512bf16/args.h: Ditto. > > > > * gcc.target/x86_64/abi/bf16/m512bf16/asm-support.S: Ditto. > > > > * gcc.target/x86_64/abi/bf16/m512bf16/bf16-zmm-check.h: Ditto. > > > > * gcc.target/x86_64/abi/bf16/m512bf16/test_m512_returning.c: > > > > Ditto. > > > > * gcc.target/x86_64/abi/bf16/m512bf16/test_passing_m512.c: > > > > Ditto. > > > > * gcc.target/x86_64/abi/bf16/m512bf16/test_passing_structs.c: > > > > Ditto. > > > > * gcc.target/x86_64/abi/bf16/m512bf16/test_passing_unions.c: > > > > Ditto. > > > > * gcc.target/x86_64/abi/bf16/m512bf16/test_varargs-m512.c: > > > > Ditto. > > > > * gcc.target/x86_64/abi/bf16/macros.h: Ditto. > > > > * > > > > gcc.target/x86_64/abi/bf16/test_3_element_struct_and_unions.c: Ditto. > > > > * gcc.target/x86_64/abi/bf16/test_basic_alignment.c: Ditto. > > > > * gcc.target/x86_64/abi/bf16/test_basic_array_size_and_align.c: > > > > Ditto. > > > > * gcc.target/x86_64/abi/bf16/test_basic_returning.c: Ditto. > > > > * gcc.target/x86_64/abi/bf16/test_basic_sizes.c: Ditto. > > > > * > > > > gcc.target/x86_64/abi/bf16/test_basic_struct_size_and_align.c: Ditto. > > > > * gcc.target/x86_64/abi/bf16/test_basic_union_size_and_align.c: > > > > Ditto. > > > > * gcc.target/x86_64/abi/bf16/test_m128_returning.c: Ditto. > > > > * gcc.target/x86_64/abi/bf16/test_passing_floats.c: Ditto. > > > > * gcc.target/x86_64/abi/bf16/test_passing_m128.c: Ditto. > > > > * gcc.target/x86_64/abi/bf16/test_passing_structs.c: Ditto. > > > > * gcc.target/x86_64/abi/bf16/test_passing_unions.c: Ditto. > > > > * gcc.target/x86_64/abi/bf16/test_struct_returning.c: Ditto. > > > > * gcc.target/x86_64/abi/bf16/test_varargs-m128.c: Ditto. > > > > > > > > -- > > H.J. > > > > -- > BR, > Hongtao -- BR, Hongtao
[PATCH] Add __m128bf16/__m256bf16/__m512bf16 type for bf16 abi test
Hi all, This patch added __m128bf16/__m256bf16/__m512bf16 type in testcases. BRs, Haochen gcc/testsuite/ChangeLog: * gcc.target/x86_64/abi/bf16/bf16-helper.h: Add _m128bf16/m256bf16/_m512bf16. * gcc.target/x86_64/abi/bf16/m512bf16/bf16-zmm-check.h: Include bf16-helper.h. --- gcc/testsuite/gcc.target/x86_64/abi/bf16/bf16-helper.h| 4 .../gcc.target/x86_64/abi/bf16/m512bf16/bf16-zmm-check.h | 1 + 2 files changed, 5 insertions(+) diff --git a/gcc/testsuite/gcc.target/x86_64/abi/bf16/bf16-helper.h b/gcc/testsuite/gcc.target/x86_64/abi/bf16/bf16-helper.h index 83d89fcf62c..e090a7254f4 100644 --- a/gcc/testsuite/gcc.target/x86_64/abi/bf16/bf16-helper.h +++ b/gcc/testsuite/gcc.target/x86_64/abi/bf16/bf16-helper.h @@ -1,3 +1,7 @@ +typedef __bf16 __m128bf16 __attribute__((__vector_size__(16), __aligned__(16))); +typedef __bf16 __m256bf16 __attribute__((__vector_size__(32), __aligned__(32))); +typedef __bf16 __m512bf16 __attribute__((__vector_size__(64), __aligned__(64))); + typedef union { float f; diff --git a/gcc/testsuite/gcc.target/x86_64/abi/bf16/m512bf16/bf16-zmm-check.h b/gcc/testsuite/gcc.target/x86_64/abi/bf16/m512bf16/bf16-zmm-check.h index 8379fcfaf8c..9cd39b878dd 100644 --- a/gcc/testsuite/gcc.target/x86_64/abi/bf16/m512bf16/bf16-zmm-check.h +++ b/gcc/testsuite/gcc.target/x86_64/abi/bf16/m512bf16/bf16-zmm-check.h @@ -1,4 +1,5 @@ #include +#include "../bf16-helper.h" static void do_test (void); -- 2.18.1
[PATCH (pushed)] analyzer: add missing final keyword
Fixes the following clang warning: gcc/analyzer/region-model.cc:5096:8: warning: 'subclass_equal_p' overrides a member function but is not marked 'override' [-Winconsistent-missing-override] gcc/analyzer/ChangeLog: * region-model.cc: Add missing final keyword. --- gcc/analyzer/region-model.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcc/analyzer/region-model.cc b/gcc/analyzer/region-model.cc index ec29be259b5..5a64c00ef14 100644 --- a/gcc/analyzer/region-model.cc +++ b/gcc/analyzer/region-model.cc @@ -5093,7 +5093,7 @@ public: return "float_as_size_arg_diagnostic"; } - bool subclass_equal_p (const pending_diagnostic &other) const + bool subclass_equal_p (const pending_diagnostic &other) const final override { return same_tree_p (m_arg, ((const float_as_size_arg &) other).m_arg); } -- 2.37.2
Re: [PATCH] RISC-V: Add runtime invariant support
On Sat, 20 Aug 2022, Andrew Pinski wrote: > On Sat, Aug 20, 2022 at 3:34 PM Andreas Schwab wrote: > > > > This breaks bootstrap: > > > > ../../gcc/tree-vect-loop-manip.cc: In function 'void > > vect_gen_vector_loop_niters(loop_vec_info, tree, tree_node**, tree_node**, > > bool)': > > ../../gcc/tree-vect-loop-manip.cc:1981:26: error: 'const_vf' may be used > > uninitialized [-Werror=maybe-uninitialized] > > 1981 | unsigned HOST_WIDE_INT const_vf; > > | ^~~~ > > cc1plus: all warnings being treated as errors > > make[3]: *** [Makefile:1146: tree-vect-loop-manip.o] Error 1 > > make[2]: *** [Makefile:4977: all-stage2-gcc] Error 2 > > make[1]: *** [Makefile:30363: stage2-bubble] Error 2 > > make: *** [Makefile:1065: all] Error 2 > > > This looks like a real uninitialized variable issue. > I even can't tell if the paths that lead to using const_vf will be > always set so how we expect GCC to do the same. > The code that uses const_vf was added with r11-5820-cdcbef3c3310, > CCing the author there. The key is tree log_vf = NULL_TREE; ... unsigned HOST_WIDE_INT const_vf; if (vf.is_constant (&const_vf) && !LOOP_VINFO_USING_PARTIAL_VECTORS_P (loop_vinfo)) { ... log_vf = build_int_cst (type, exact_log2 (const_vf)); ... } ... if (stmts != NULL && log_vf) { ... use const_vf ... so it's uninit analysis little mind that is confused. There is code that's supposed to handle the situation (setting flag under condition, testing that flag instead of condition) but maybe it's too twisted here. One could refector this as bool const_vf_p = vf.is_constant (&const_vf); if (const_vf_p && ...) ... if (stmts != NULL && const_vf_p) ... and hope uninits mind is good enough to see log_vf is not used uninitialized. I can also look into why uninit doesn't get it, but preprocessed source would be handy then. Richard.
[PATCH][RFC] tree-optimization/105646 - re-interpret always executed in uninit diag
The following fixes PR105646, not diagnosing int f1(); int f3(){ auto const & a = f1(); bool v3{v3}; return a; } with optimization because the early uninit diagnostic pass only diagnoses always executed cases. The patch does this by re-interpreting what always executed means and choosing to ignore exceptional and abnormal control flow for this. At the same time it improves things as suggested in a comment - when the value-numbering run done without optimizing figures there's a fallthru path, consider blocks on it as always executed. Bootstrapped and tested on x86_64-unknown-linux-gnu. OK? Thanks, Richard. PR tree-optimization/105646 * tree-ssa-uninit.cc (warn_uninitialized_vars): Pre-compute the set of fallthru reachable blocks from function entry and use that to determine wlims.always_executed. * g++.dg/uninit-pr105646.C: New testcase. --- gcc/testsuite/g++.dg/uninit-pr105646.C | 17 + gcc/tree-ssa-uninit.cc | 53 +- 2 files changed, 61 insertions(+), 9 deletions(-) create mode 100644 gcc/testsuite/g++.dg/uninit-pr105646.C diff --git a/gcc/testsuite/g++.dg/uninit-pr105646.C b/gcc/testsuite/g++.dg/uninit-pr105646.C new file mode 100644 index 000..48ceb986ec6 --- /dev/null +++ b/gcc/testsuite/g++.dg/uninit-pr105646.C @@ -0,0 +1,17 @@ +// { dg-do compile } +// { dg-require-effective-target c++11 } +// { dg-options "-O2 -Wuninitialized" } + +int f1(); +int f2(){ +bool v2{v2}; // { dg-warning "is used uninitialized" } +auto const & a = f1(); +return a; +} +int f3(){ +auto const & a = f1(); +// Diagnose the following when optimizing and as unconditional +// uninitialized use despite f1 possibly throwing +bool v3{v3}; // { dg-warning "is used uninitialized" } +return a; +} diff --git a/gcc/tree-ssa-uninit.cc b/gcc/tree-ssa-uninit.cc index 7074c9117b2..b687e24a7e6 100644 --- a/gcc/tree-ssa-uninit.cc +++ b/gcc/tree-ssa-uninit.cc @@ -987,10 +987,49 @@ warn_uninitialized_vars (bool wmaybe_uninit) wlimits wlims = { }; wlims.wmaybe_uninit = wmaybe_uninit; - gimple_stmt_iterator gsi; - basic_block bb; + auto_bb_flag ft_reachable (cfun); + + /* Mark blocks that are always executed when we ignore provably + not executed and EH and abnormal edges. */ + basic_block bb = single_succ (ENTRY_BLOCK_PTR_FOR_FN (cfun)); + while (!(bb->flags & ft_reachable)) +{ + bb->flags |= ft_reachable; + edge e = find_fallthru_edge (bb->succs); + if (e && e->flags & EDGE_EXECUTABLE) + { + bb = e->dest; + continue; + } + /* Find a single executable edge. */ + edge_iterator ei; + edge ee = NULL; + FOR_EACH_EDGE (e, ei, bb->succs) + if (e->flags & EDGE_EXECUTABLE) + { + if (!ee) + ee = e; + else + { + ee = NULL; + break; + } + } + if (ee) + bb = ee->dest; + else + { + bb = get_immediate_dominator (CDI_POST_DOMINATORS, bb); + if (!bb || bb->index == EXIT_BLOCK) + break; + } +} + FOR_EACH_BB_FN (bb, cfun) { + wlims.always_executed = (bb->flags & ft_reachable); + bb->flags &= ~ft_reachable; + edge_iterator ei; edge e; FOR_EACH_EDGE (e, ei, bb->preds) @@ -1001,14 +1040,10 @@ warn_uninitialized_vars (bool wmaybe_uninit) if (!e) continue; - basic_block succ = single_succ (ENTRY_BLOCK_PTR_FOR_FN (cfun)); - /* ??? This could be improved when we use a greedy walk and have -some edges marked as not executable. */ - wlims.always_executed = dominated_by_p (CDI_POST_DOMINATORS, succ, bb); - if (wlims.always_executed) warn_uninit_phi_uses (bb); + gimple_stmt_iterator gsi; for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi)) { gimple *stmt = gsi_stmt (gsi); @@ -1029,7 +1064,7 @@ warn_uninitialized_vars (bool wmaybe_uninit) FOR_EACH_SSA_USE_OPERAND (use_p, stmt, op_iter, SSA_OP_USE) { /* BIT_INSERT_EXPR first operand should not be considered -a use for the purpose of uninit warnings. */ +a use for the purpose of uninit warnings. */ if (gassign *ass = dyn_cast (stmt)) { if (gimple_assign_rhs_code (ass) == BIT_INSERT_EXPR @@ -1040,7 +1075,7 @@ warn_uninitialized_vars (bool wmaybe_uninit) if (wlims.always_executed) warn_uninit (OPT_Wuninitialized, use, SSA_NAME_VAR (use), stmt); - else if (wmaybe_uninit) + else if (wlims.wmaybe_uninit) warn_uninit (OPT_Wmaybe_uninitialized, use, SSA_NAME_VAR (use), stmt); } -- 2.35.3