llvmorg-github-actions[bot] wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang

Author: LeeYoungJoon (IamYJLee)

<details>
<summary>Changes</summary>

The selected index of a PackIndexingType was not serialized, so on 
deserialization its canonical type was rebuilt as a dependent type, crashing 
CodeGen.

Difference in `Ty` during `CodeGenTypes::ConvertType` 
(https://github.com/llvm/llvm-project/blob/49cf5a7ba0ab76a1f700ce6407cea1713741bc01/clang/lib/CodeGen/CodeGenTypes.cpp#L415-L424)

### Before 
```cpp
PackIndexingType 0x142914680 'int' sugar
|-SubstTemplateTypeParmPackType 0x1429145a0 'Ts' dependent 
contains_unexpanded_pack imported typename depth 0 index 0 ... Ts
| |-TypeAliasTemplate 0x142914318 'element'
| `-TemplateArgument pack '&lt;int&gt;'
|   `-TemplateArgument type 'int'
|     `-BuiltinType 0x14401cf10 'int'
|-ConstantExpr 0x142914630 '__size_t':'unsigned long'
| |-value: Int 0
| `-ImplicitCastExpr 0x1429145f0 '__size_t':'unsigned long' &lt;IntegralCast&gt;
|   `-IntegerLiteral 0x1429145d0 'int' 0
`-SubstTemplateTypeParmType 0x142914650 'int' sugar imported typename depth 0 
index 0 ... Ts pack_index 0 final
  |-TypeAliasTemplate 0x142914318 'element'
  `-BuiltinType 0x14401cf10 'int'
```

### After
```cpp
BuiltinType 0x14e02e710 'int'
```

Fixes https://github.com/llvm/llvm-project/issues/204479

---
Full diff: https://github.com/llvm/llvm-project/pull/205965.diff


1 Files Affected:

- (modified) clang/include/clang/AST/TypeProperties.td (+4-1) 


``````````diff
diff --git a/clang/include/clang/AST/TypeProperties.td 
b/clang/include/clang/AST/TypeProperties.td
index f16c10da430f9..e2168d0a00ff4 100644
--- a/clang/include/clang/AST/TypeProperties.td
+++ b/clang/include/clang/AST/TypeProperties.td
@@ -489,9 +489,12 @@ let Class = PackIndexingType in {
   def : Property<"expansions", Array<QualType>> {
     let Read = [{ node->getExpansions() }];
   }
+  def : Property<"index", UnsignedOrNone> {
+    let Read = [{ node->getSelectedIndex() }];
+  }
 
   def : Creator<[{
-    return ctx.getPackIndexingType(pattern, indexExpression, 
isFullySubstituted, expansions);
+    return ctx.getPackIndexingType(pattern, indexExpression, 
isFullySubstituted, expansions, index);
   }]>;
 }
 

``````````

</details>


https://github.com/llvm/llvm-project/pull/205965
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to