Thanks for your advice, I have misunderstood what you meant.
I have sent a second version patch, please review whether it is OK.
On 2021/9/16 23:19, Jason Merrill wrote:
On 9/16/21 05:11, wangpc via Gcc-patches wrote:
This patch adds type checking for static local vector variable in
C++ template, both AArch64 SVE and RISCV RVV are of sizeless type
and they all have this issue.
2021-08-06 wangpc <pc.w...@linux.alibaba.com>
gcc/cp/ChangeLog
* decl.c (cp_finish_decl): Add type checking.
gcc/testsuite/ChangeLog
* g++.target/aarch64/sve/static-var-in-template.C: New test.
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 90111e4c786..e3a06ea0858 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -7520,6 +7520,12 @@ cp_finish_decl (tree decl, tree init, bool
init_const_expr_p,
&& DECL_INITIALIZED_IN_CLASS_P (decl))
check_static_variable_definition (decl, type);
+ if (VAR_P (decl)
+ && DECL_FUNCTION_SCOPE_P (decl)
+ && TREE_STATIC (decl))
+ verify_type_context (DECL_SOURCE_LOCATION (decl),
+ TCTX_STATIC_STORAGE, type);
I was thinking to move the verify_type_context code from start_decl,
which handles more cases:
if (is_global_var (decl))
{
type_context_kind context = (DECL_THREAD_LOCAL_P (decl)
? TCTX_THREAD_STORAGE
: TCTX_STATIC_STORAGE);
verify_type_context (input_location, context, TREE_TYPE (decl));
}
Jason