hokein updated this revision to Diff 294628. hokein added a comment. update the patch to fix another crash `ABC<N> abc` where N's initailizer is contains-errors.
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D86048/new/ https://reviews.llvm.org/D86048 Files: clang/lib/AST/ComputeDependence.cpp clang/test/Sema/invalid-member.cpp Index: clang/test/Sema/invalid-member.cpp =================================================================== --- clang/test/Sema/invalid-member.cpp +++ clang/test/Sema/invalid-member.cpp @@ -19,3 +19,11 @@ }; // Should be able to evaluate sizeof without crashing. static_assert(sizeof(Z) == 1, "No valid members"); + +constexpr int N = undef; // expected-error {{use of undeclared identifier}} +template<int a> +class ABC {}; +class T { + ABC<N> abc; +}; +static_assert(sizeof(T) == 1, "No valid members"); Index: clang/lib/AST/ComputeDependence.cpp =================================================================== --- clang/lib/AST/ComputeDependence.cpp +++ clang/lib/AST/ComputeDependence.cpp @@ -466,10 +466,12 @@ : Var->getType()->isIntegralOrEnumerationType()) && (Var->getType().isConstQualified() || Var->getType()->isReferenceType())) { - if (const Expr *Init = Var->getAnyInitializer()) - if (Init->isValueDependent()) { + if (const Expr *Init = Var->getAnyInitializer()) { + if (Init->isValueDependent()) Deps |= ExprDependence::ValueInstantiation; - } + if (Init->containsErrors()) + Deps |= ExprDependence::Error; + } } // (VD) - FIXME: Missing from the standard:
Index: clang/test/Sema/invalid-member.cpp =================================================================== --- clang/test/Sema/invalid-member.cpp +++ clang/test/Sema/invalid-member.cpp @@ -19,3 +19,11 @@ }; // Should be able to evaluate sizeof without crashing. static_assert(sizeof(Z) == 1, "No valid members"); + +constexpr int N = undef; // expected-error {{use of undeclared identifier}} +template<int a> +class ABC {}; +class T { + ABC<N> abc; +}; +static_assert(sizeof(T) == 1, "No valid members"); Index: clang/lib/AST/ComputeDependence.cpp =================================================================== --- clang/lib/AST/ComputeDependence.cpp +++ clang/lib/AST/ComputeDependence.cpp @@ -466,10 +466,12 @@ : Var->getType()->isIntegralOrEnumerationType()) && (Var->getType().isConstQualified() || Var->getType()->isReferenceType())) { - if (const Expr *Init = Var->getAnyInitializer()) - if (Init->isValueDependent()) { + if (const Expr *Init = Var->getAnyInitializer()) { + if (Init->isValueDependent()) Deps |= ExprDependence::ValueInstantiation; - } + if (Init->containsErrors()) + Deps |= ExprDependence::Error; + } } // (VD) - FIXME: Missing from the standard:
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits