[cfe-dev] Semantics of __CFConstantStringClassReference variable (clang crash in PR38615)

Manoj Gupta via cfe-dev cfe-dev at lists.llvm.org
Tue Aug 21 17:08:45 PDT 2018


Hi,

I am looking for some help regarding a clang crash  when building
opencflite. The root cause of the crash is because clang tries to create a
GlobalValue "__CFConstantStringClassReference"  but a variable of same name
is also present in the source file.

Crash location:
https://github.com/llvm-mirror/clang/blob/master/lib/CodeGen/CodeGenModule.cpp#L4058

  // If we don't already have it, get __CFConstantStringClassReference.
  if (!CFConstantStringClassRef) {
    llvm::Type *Ty = getTypes().ConvertType(getContext().IntTy);
    Ty = llvm::ArrayType::get(Ty, 0);
    llvm::GlobalValue *GV = cast<llvm::GlobalValue>(
        CreateRuntimeVariable(Ty, "__CFConstantStringClassReference")); //
Crashes here

Opencflite also declares __CFConstantStringClassReference as a variable,
https://github.com/nevali/opencflite/blob/03999700cf3b79975ae2f2e5f4100ea7096acb3a/CFInternal.h#L364
:

extern int __CFConstantStringClassReference[];

I do not know the semantics of the name __CFConstantStringClassReference.
Is this a reserved name and should opencflite not be declaring this
variable ? If so, appreciate any advice on how to fix the offending code.

Or is this a  bug in clang?

For reference, r327993 (https://reviews.llvm.org/rL327993)  introduced this
code.

Author:     Rafael Espindola <rafael.espindola at gmail.com>
AuthorDate: Tue Mar 20 15:48:00 2018 +0000

    Set dso_local for CFConstantStringClassReference.

    This one cannot use setGVProperties since it has special logic for
    when it is dllimport or not.
    git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@*327993*
91177308-0d34-0410-b5e6-96231b3b80d8

Thanks,
Manoj
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20180821/f4a0095c/attachment.html>


More information about the cfe-dev mailing list