From c673d67bc76bfa31b78e3eee23899b9f262158ea Mon Sep 17 00:00:00 2001 From: Haojian Wu Date: Wed, 25 May 2022 14:58:28 +0200 Subject: [PATCH] [AST] Dont invalidate a ref-type var decl if it has no initializer. This would allow more AST nodes being preserved for broken code, and have a more consistent valid bit for ref-type var decl (currently, a ref-type var decl with a broken initializer is valid). Per https://reviews.llvm.org/D76831#1973053, the initializer of a variable should play no part in its "invalid" bit. Reviewed By: sammccall Differential Revision: https://reviews.llvm.org/D122935 --- clang/lib/Sema/SemaDecl.cpp | 1 - clang/test/AST/ast-dump-invalid-initialized.cpp | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index b150a88..c5d4075 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -13199,7 +13199,6 @@ void Sema::ActOnUninitializedDecl(Decl *RealDecl) { if (Type->isReferenceType()) { Diag(Var->getLocation(), diag::err_reference_var_requires_init) << Var << SourceRange(Var->getLocation(), Var->getLocation()); - Var->setInvalidDecl(); return; } diff --git a/clang/test/AST/ast-dump-invalid-initialized.cpp b/clang/test/AST/ast-dump-invalid-initialized.cpp index 1b3c858..1c374ae 100644 --- a/clang/test/AST/ast-dump-invalid-initialized.cpp +++ b/clang/test/AST/ast-dump-invalid-initialized.cpp @@ -12,10 +12,10 @@ void test() { const A a2; // CHECK: `-VarDecl {{.*}} a3 'A' A a3 = garbage(); + // CHECK: `-VarDecl {{.*}} a4 'const A &' + const A& a4; - // CHECK: `-VarDecl {{.*}} invalid b1 'const A &' - const A& b1; // CHECK: `-VarDecl {{.*}} invalid b2 'ForwardDecl' ForwardDecl b2; // CHECK: `-VarDecl {{.*}} invalid b3 'auto' -- 2.7.4