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

Reply via email to