Question

Mon application construit, exécute, simule, etc.etc.bien!Tout fonctionne à 100 % sur les simulateurs et les appareils physiques.Aucune erreur ou avertissement pendant la construction.

Désormais, lorsque j'essaie d'archiver mon projet, j'obtiens l'erreur suivante :

0  clang             0x000000010bdb3472 _ZL15PrintStackTracePv + 34
1  clang             0x000000010bdb38f9 _ZL13SignalHandleri + 553
2  libsystem_c.dylib 0x00007fff8bd8ccfa _sigtramp + 26
3  libsystem_c.dylib 0x0000000000000001 _sigtramp + 18446603338169922337
4  clang             0x000000010bc7fbbf (anonymous namespace)::ObjCARCOpt::runOnFunction(llvm::Function&) + 7407
5  clang             0x000000010b0502b2 llvm::FPPassManager::runOnFunction(llvm::Function&) + 322
6  clang             0x000000010b052baf (anonymous namespace)::CGPassManager::runOnModule(llvm::Module&) + 1039
7  clang             0x000000010b050bc1 llvm::MPPassManager::runOnModule(llvm::Module&) + 289
8  clang             0x000000010b0505c5 llvm::PassManagerImpl::run(llvm::Module&) + 277
9  clang             0x000000010b0504ad llvm::PassManager::run(llvm::Module&) + 13
10 clang             0x000000010b02f0e8 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::Module*, clang::BackendAction, llvm::raw_ostream*) + 4424
11 clang             0x000000010b02c941 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) + 513
12 clang             0x000000010aef83f6 clang::ParseAST(clang::Sema&, bool) + 406
13 clang             0x000000010aef6ed7 clang::CodeGenAction::ExecuteAction() + 855
14 clang             0x000000010aec943f clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 879
15 clang             0x000000010aec80cb clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 2683
16 clang             0x000000010aeba8ce cc1_main(char const**, char const**, char const*, void*) + 5086
17 clang             0x000000010ae950d8 main + 648
18 clang             0x000000010ae94e44 start + 52
clang: error: unable to execute command: Segmentation fault: 11
clang: error: clang frontend command failed due to signal 2 (use -v to see invocation)
clang: note: diagnostic msg: Please submit a bug report to http://developer.apple.com/bugreporter/ and include command line arguments and all diagnostic information.
clang: note: diagnostic msg: Preprocessed source(s) and associated run script(s) are located at:
clang: note: diagnostic msg: /var/folders/yn/jhqtwmzx2l31sytjj7ltz_qc0000gn/T/Image-u5GlrW.mii
clang: note: diagnostic msg: /var/folders/yn/jhqtwmzx2l31sytjj7ltz_qc0000gn/T/Image-u5GlrW.sh
Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang failed with exit code 254

et je ne sais pas pourquoi.Maintenant, le problème vient de Image.mm que j'utilise depuis le simple-iphone-image-processing projet.Et je pense que cela a à voir avec ARC.Quelqu'un peut-il nous éclairer davantage à ce sujet ?

Merci


MISE À JOUR

OK, alors je l'ai essayé plusieurs fois et ça a fonctionné.Le problème est donc intermittent.Je laisse cette question ici si quelqu'un d'autre a quelque chose à dire.

Était-ce utile?

La solution

La fonction qui casse est ObjCARCOpt::runOnFunction(llvm::Function&).Juste pour rire, j'ai posté le code runOnFunction() ci-dessous.Le but de cette fonction est d'optimiser le code objet lié à ARC dans le llvm::Function objet qui est transmis.C'est bien, mais il semble y avoir un bug dans le compilateur lié à la gestion Objective-C++, ce qui ne me surprend franchement pas.

Des rapports de bogues ont déjà été soumis à Apple (ici, ici, probablement ailleurs).Vous devriez également le signaler.

En attendant, je pourrais suggérer certaines choses.

1) Puisque le problème est intermittent, poursuivez simplement votre projet.Cela pourrait fonctionner pour vous, ou peut-être pas.Après tout, les compilateurs sont censés être déterministes...

2) Essayez de désactiver ARC pour vos éléments Obj-C++.C'est probablement la manière la plus simple.

3) Désactivez les optimisations ARC.Faites cela en omettant -enable-objc-arc-opts de votre construction.Comment faire cela en utilisant les paramètres de construction XCode est laissé comme un exercice pour le lecteur.Quoi qu'il en soit, je pense que votre meilleur pari est 2).

Coder de llvm-3.0.src/lib/Transforms/Scalar/ObjCARC.cpp est inférieure à.Votre meilleur pari est de sortir à if (!Run) return false;. Run sera faux si ARC est désactivé dans le module en cours d'analyse.Bonne chance, n'oubliez pas de soumettre ce rapport de bug !

bool ObjCARCOpt::runOnFunction(Function &F) {
  if (!EnableARCOpts)
    return false;

  // If nothing in the Module uses ARC, don't do anything.
  if (!Run)
    return false;

  Changed = false;

  PA.setAA(&getAnalysis<AliasAnalysis>());

  // This pass performs several distinct transformations. As a compile-time aid
  // when compiling code that isn't ObjC, skip these if the relevant ObjC
  // library functions aren't declared.

  // Preliminary optimizations. This also computs UsedInThisFunction.
  OptimizeIndividualCalls(F);

  // Optimizations for weak pointers.
  if (UsedInThisFunction & ((1 << IC_LoadWeak) |
                            (1 << IC_LoadWeakRetained) |
                            (1 << IC_StoreWeak) |
                            (1 << IC_InitWeak) |
                            (1 << IC_CopyWeak) |
                            (1 << IC_MoveWeak) |
                            (1 << IC_DestroyWeak)))
    OptimizeWeakCalls(F);

  // Optimizations for retain+release pairs.
  if (UsedInThisFunction & ((1 << IC_Retain) |
                            (1 << IC_RetainRV) |
                            (1 << IC_RetainBlock)))
    if (UsedInThisFunction & (1 << IC_Release))
      // Run OptimizeSequences until it either stops making changes or
      // no retain+release pair nesting is detected.
      while (OptimizeSequences(F)) {}

  // Optimizations if objc_autorelease is used.
  if (UsedInThisFunction &
      ((1 << IC_Autorelease) | (1 << IC_AutoreleaseRV)))
    OptimizeReturns(F);

  return Changed;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top