hokein created this revision. hokein added a reviewer: sammccall. Herald added a project: clang.
crash stack: llvm-project/clang/lib/AST/ASTContext.cpp:2248: clang::TypeInfo clang::ASTContext::getTypeInfoImpl(const clang::Type *) const: Assertion `!A->getDeducedType().isNull() && "cannot request the size of an undeduced or dependent auto type"' failed. PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace, preprocessed source, and associated run script. Stack dump: #0 0x00000000025bb0bf llvm::sys::PrintStackTrace(llvm::raw_ostream&) llvm-project/llvm/lib/Support/Unix/Signals.inc:564:13 #1 0x00000000025b92b0 llvm::sys::RunSignalHandlers() llvm-project/llvm/lib/Support/Signals.cpp:69:18 #2 0x00000000025bb535 SignalHandler(int) llvm-project/llvm/lib/Support/Unix/Signals.inc:396:3 #3 0x00007f9ef9298110 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14110) #4 0x00007f9ef8d72761 raise /build/glibc-M65Gwz/glibc-2.30/signal/../sysdeps/unix/sysv/linux/raise.c:51:1 #5 0x00007f9ef8d5c55b abort /build/glibc-M65Gwz/glibc-2.30/stdlib/abort.c:81:7 #6 0x00007f9ef8d5c42f get_sysdep_segment_value /build/glibc-M65Gwz/glibc-2.30/intl/loadmsgcat.c:509:8 #7 0x00007f9ef8d5c42f _nl_load_domain /build/glibc-M65Gwz/glibc-2.30/intl/loadmsgcat.c:970:34 #8 0x00007f9ef8d6b092 (/lib/x86_64-linux-gnu/libc.so.6+0x34092) #9 0x000000000458abe0 clang::ASTContext::getTypeInfoImpl(clang::Type const*) const llvm-project/clang/lib/AST/ASTContext.cpp:0:5 Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D81384 Files: clang/lib/Sema/SemaStmt.cpp clang/test/SemaCXX/for-range-crash.cpp Index: clang/test/SemaCXX/for-range-crash.cpp =================================================================== --- /dev/null +++ clang/test/SemaCXX/for-range-crash.cpp @@ -0,0 +1,10 @@ +// RUN: %clang_cc1 -fsyntax-only -verify -std=c++17 %s + +template <typename> +class Bar { + Bar<int> *variables_to_modify; + foo() { // expected-error {{C++ requires a type specifier for all declarations}} + for (auto *c : *variables_to_modify) + delete c; + } +}; \ No newline at end of file Index: clang/lib/Sema/SemaStmt.cpp =================================================================== --- clang/lib/Sema/SemaStmt.cpp +++ clang/lib/Sema/SemaStmt.cpp @@ -2434,8 +2434,11 @@ QualType RangeType = Range->getType(); if (RequireCompleteType(RangeLoc, RangeType, - diag::err_for_range_incomplete_type)) + diag::err_for_range_incomplete_type)) { + if (LoopVar->getType()->isUndeducedType()) + LoopVar->setInvalidDecl(); return StmtError(); + } // Build auto __begin = begin-expr, __end = end-expr. // Divide by 2, since the variables are in the inner scope (loop body).
Index: clang/test/SemaCXX/for-range-crash.cpp =================================================================== --- /dev/null +++ clang/test/SemaCXX/for-range-crash.cpp @@ -0,0 +1,10 @@ +// RUN: %clang_cc1 -fsyntax-only -verify -std=c++17 %s + +template <typename> +class Bar { + Bar<int> *variables_to_modify; + foo() { // expected-error {{C++ requires a type specifier for all declarations}} + for (auto *c : *variables_to_modify) + delete c; + } +}; \ No newline at end of file Index: clang/lib/Sema/SemaStmt.cpp =================================================================== --- clang/lib/Sema/SemaStmt.cpp +++ clang/lib/Sema/SemaStmt.cpp @@ -2434,8 +2434,11 @@ QualType RangeType = Range->getType(); if (RequireCompleteType(RangeLoc, RangeType, - diag::err_for_range_incomplete_type)) + diag::err_for_range_incomplete_type)) { + if (LoopVar->getType()->isUndeducedType()) + LoopVar->setInvalidDecl(); return StmtError(); + } // Build auto __begin = begin-expr, __end = end-expr. // Divide by 2, since the variables are in the inner scope (loop body).
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits