Pregunta

Mi aplicación se construye, ejecuta, simula, etc.etc.¡bien!Todo funciona al 100% tanto en los simuladores como en los dispositivos físicos.Sin errores ni advertencias durante la construcción.

Ahora, cuando intento archivar mi proyecto, aparece el siguiente error:

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

y no tengo idea de por qué.Ahora el problema proviene de Image.mm que estoy usando desde el simple-iphone-image-processing proyecto.Y creo que tiene que ver con ARC.¿Alguien puede arrojar más luz sobre esto?

Gracias


ACTUALIZAR

Bien, lo intenté varias veces y funcionó.Entonces el problema es intermitente.Dejo esta pregunta aquí por si alguien más tiene algo que decir.

¿Fue útil?

Solución

La función que se está rompiendo es ObjCARCOpt::runOnFunction(llvm::Function&).Solo para reír, publiqué el código runOnFunction() a continuación.El propósito de esta función es optimizar el código objeto relacionado con ARC en el llvm::Function objeto que se pasa.Está bien, pero parece haber un error en el compilador relacionado con el manejo de Objective-C++, lo que francamente no me sorprende.

Ya se han enviado informes de errores a Apple (aquí, aquí, probablemente en otros lugares).Deberías denunciarlo también.

Hasta entonces, hay algunas cosas que podría sugerir.

1) Dado que el problema es intermitente, continúe con su proyecto.Esto podría funcionar para ti, o tal vez no.Después de todo, se supone que los compiladores son deterministas...

2) Intente desactivar ARC para sus cosas de Obj-C++.Esta es probablemente la forma más sencilla.

3) Desactive las optimizaciones ARC.Haga esto omitiendo -enable-objc-arc-opts de tu construcción.Cómo hacer esto usando la configuración de compilación de XCode se deja como ejercicio para el lector.De todos modos creo que tu mejor opción es 2).

Código de llvm-3.0.src/lib/Transforms/Scalar/ObjCARC.cpp Esta abajo.Lo mejor que puedes hacer es salir en if (!Run) return false;. Run será falso si ARC está deshabilitado en el módulo que se está analizando.¡Buena suerte, no olvides enviar ese informe de error!

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;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top