[clang] bbab17c - [Clang][Attr] fix a btf_type_attr CGDebugInfo codegen bug

Yonghong Song via cfe-commits cfe-commits at lists.llvm.org
Sat Nov 6 18:21:45 PDT 2021


Author: Yonghong Song
Date: 2021-11-06T18:19:00-07:00
New Revision: bbab17c6c987d7a6612855c02a4e8988dac0dc17

URL: https://github.com/llvm/llvm-project/commit/bbab17c6c987d7a6612855c02a4e8988dac0dc17
DIFF: https://github.com/llvm/llvm-project/commit/bbab17c6c987d7a6612855c02a4e8988dac0dc17.diff

LOG: [Clang][Attr] fix a btf_type_attr CGDebugInfo codegen bug

Nathan Chancellor reported a crash due to commit
3466e00716e1 (Reland "[Attr] support btf_type_tag attribute").

The following test can reproduce the crash:
  $ cat efi.i
  typedef unsigned long efi_query_variable_info_t(int);
  typedef struct {
    struct {
      efi_query_variable_info_t __attribute__((regparm(0))) * query_variable_info;
    };
  } efi_runtime_services_t;
  efi_runtime_services_t efi_0;
  $ clang -m32 -O2 -g -c -o /dev/null efi.i

The reason is that FunctionTypeLoc.getParam(Idx) may return a
nullptr which should be checked before dereferencing the
result pointer. This patch fixed this issue.

Added: 
    

Modified: 
    clang/lib/CodeGen/CGDebugInfo.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp
index 2b9532534e3aa..1ce56f98e1f09 100644
--- a/clang/lib/CodeGen/CGDebugInfo.cpp
+++ b/clang/lib/CodeGen/CGDebugInfo.cpp
@@ -1446,9 +1446,10 @@ llvm::DIType *CGDebugInfo::CreateType(const FunctionType *Ty,
         for (const QualType &ParamType : FPT->param_types()) {
           TypeLoc ParamTL;
           if (Idx < FTL_NumParams) {
-            ParmVarDecl *Param = FTL.getParam(Idx);
-            if (const TypeSourceInfo *TSI = Param->getTypeSourceInfo())
-              ParamTL = TSI->getTypeLoc();
+            if (ParmVarDecl *Param = FTL.getParam(Idx)) {
+              if (const TypeSourceInfo *TSI = Param->getTypeSourceInfo())
+                ParamTL = TSI->getTypeLoc();
+            }
           }
           EltTys.push_back(getOrCreateType(ParamType, Unit, ParamTL));
           Idx++;


        


More information about the cfe-commits mailing list