[flang-commits] [flang] b6f1bad - [flang] Fixed a crash
    Pete Steinfeld via flang-commits 
    flang-commits at lists.llvm.org
       
    Mon May  4 07:54:54 PDT 2020
    
    
  
Author: Pete Steinfeld
Date: 2020-05-04T07:54:23-07:00
New Revision: b6f1bad630faa86104703f40c33a7653668e6a4a
URL: https://github.com/llvm/llvm-project/commit/b6f1bad630faa86104703f40c33a7653668e6a4a
DIFF: https://github.com/llvm/llvm-project/commit/b6f1bad630faa86104703f40c33a7653668e6a4a.diff
LOG: [flang] Fixed a crash
Summary:
I found a small test case that caused a crash when derived type
definitions have parameters without definitions.
Reviewers: tskeith, klausler, DavidTruby
Subscribers: llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D79282
Added: 
    
Modified: 
    flang/lib/Semantics/type.cpp
    flang/test/Semantics/resolve33.f90
Removed: 
    
################################################################################
diff  --git a/flang/lib/Semantics/type.cpp b/flang/lib/Semantics/type.cpp
index 40518ce24ba1..80f994045749 100644
--- a/flang/lib/Semantics/type.cpp
+++ b/flang/lib/Semantics/type.cpp
@@ -77,7 +77,9 @@ void DerivedTypeSpec::CookParameters(evaluate::FoldingContext &foldingContext) {
       name = *nextNameIter++;
       auto it{std::find_if(parameterDecls.begin(), parameterDecls.end(),
           [&](const Symbol &symbol) { return symbol.name() == name; })};
-      CHECK(it != parameterDecls.end());
+      if (it == parameterDecls.end()) {
+        break;
+      }
       attr = it->get().get<TypeParamDetails>().attr();
     } else {
       messages.Say(name_,
diff  --git a/flang/test/Semantics/resolve33.f90 b/flang/test/Semantics/resolve33.f90
index 176404b9db63..3fa6bec15f2c 100644
--- a/flang/test/Semantics/resolve33.f90
+++ b/flang/test/Semantics/resolve33.f90
@@ -30,4 +30,11 @@ module m
     !ERROR: Type parameter, component, or procedure binding 'a' already defined in this type
     integer, len :: a
   end type
+  !ERROR: No definition found for type parameter 'k'
+  !ERROR: No definition found for type parameter 'l'
+  type :: t6(k, l)
+    !ERROR: Must be a constant value
+    character(kind=k, len=l) :: d3
+  end type
+  type(t6(2, 10)) :: x3
 end module
        
    
    
More information about the flang-commits
mailing list