Commit d8568622 authored by Hans Wennborg's avatar Hans Wennborg
Browse files

Merging r340191:

------------------------------------------------------------------------
r340191 | abataev | 2018-08-20 20:03:40 +0200 (Mon, 20 Aug 2018) | 6 lines

[OPENMP] Fix crash on the emission of the weak function declaration.

If the function is actually a weak reference, it should not be marked as
deferred definition as this is only a declaration. Patch adds checks for
the definitions if they must be emitted. Otherwise, only declaration is
emitted.
------------------------------------------------------------------------

llvm-svn: 340351
parent e23b77ca
Loading
Loading
Loading
Loading
+11 −9
Original line number Diff line number Diff line
@@ -2539,7 +2539,8 @@ llvm::Constant *CodeGenModule::GetOrCreateLLVMFunction(
    if (getLangOpts().OpenMPIsDevice && OpenMPRuntime &&
        !OpenMPRuntime->markAsGlobalTarget(GD) && FD->isDefined() &&
        !DontDefer && !IsForDefinition) {
      const FunctionDecl *FDDef = FD->getDefinition();
      if (const FunctionDecl *FDDef = FD->getDefinition())
        if (getContext().DeclMustBeEmitted(FDDef)) {
          GlobalDecl GDDef;
          if (const auto *CD = dyn_cast<CXXConstructorDecl>(FDDef))
            GDDef = GlobalDecl(CD, GD.getCtorType());
@@ -2549,6 +2550,7 @@ llvm::Constant *CodeGenModule::GetOrCreateLLVMFunction(
            GDDef = GlobalDecl(FDDef);
          addDeferredDeclToEmit(GDDef);
        }
    }

    if (FD->isMultiVersion()) {
      const auto *TA = FD->getAttr<TargetAttr>();
+14 −0
Original line number Diff line number Diff line
@@ -91,5 +91,19 @@ int baz2() {
  return 2 + baz3();
}

extern int create() throw();

static __typeof(create) __t_create __attribute__((__weakref__("__create")));

int baz5() {
  bool a;
// CHECK-DAG: define weak void @__omp_offloading_{{.*}}baz5{{.*}}_l[[@LINE+1]](i64 {{.*}})
#pragma omp target
  a = __extension__(void *) & __t_create != 0;
  return a;
}

// CHECK-DAG: declare extern_weak signext i32 @__create()

// CHECK-NOT: define {{.*}}{{baz1|baz4|maini1}}
#endif // HEADER