forked from OSchip/llvm-project
Re-commit r214547 with tests fixed. Hopefully all the bots will be happy now.
Original message: Fix iterator invalidation issues that are breaking my modules buildbot's bootstrap. llvm-svn: 214555
This commit is contained in:
parent
e2d6429493
commit
1ba0a07e46
|
@ -3305,9 +3305,16 @@ void CodeGenModule::EmitVersionIdentMetadata() {
|
|||
}
|
||||
|
||||
void CodeGenModule::EmitTargetMetadata() {
|
||||
for (auto &I : MangledDeclNames) {
|
||||
const Decl *D = I.first.getDecl()->getMostRecentDecl();
|
||||
llvm::GlobalValue *GV = GetGlobalValue(I.second);
|
||||
// Warning, new MangledDeclNames may be appended within this loop.
|
||||
// We rely on MapVector insertions adding new elements to the end
|
||||
// of the container.
|
||||
// FIXME: Move this loop into the one target that needs it, and only
|
||||
// loop over those declarations for which we couldn't emit the target
|
||||
// metadata when we emitted the declaration.
|
||||
for (unsigned I = 0; I != MangledDeclNames.size(); ++I) {
|
||||
auto &Val = *(MangledDeclNames.begin() + I);
|
||||
const Decl *D = Val.first.getDecl()->getMostRecentDecl();
|
||||
llvm::GlobalValue *GV = GetGlobalValue(Val.second);
|
||||
getTargetCodeGenInfo().emitTargetMD(D, GV, *this);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -94,9 +94,11 @@ namespace {
|
|||
for (DeclGroupRef::iterator I = DG.begin(), E = DG.end(); I != E; ++I)
|
||||
Builder->EmitTopLevelDecl(*I);
|
||||
|
||||
// Emit any deferred inline method definitions.
|
||||
for (CXXMethodDecl *MD : DeferredInlineMethodDefinitions)
|
||||
Builder->EmitTopLevelDecl(MD);
|
||||
// Emit any deferred inline method definitions. Note that more deferred
|
||||
// methods may be added during this loop, since ASTConsumer callbacks
|
||||
// can be invoked if AST inspection results in declarations being added.
|
||||
for (unsigned I = 0; I != DeferredInlineMethodDefinitions.size(); ++I)
|
||||
Builder->EmitTopLevelDecl(DeferredInlineMethodDefinitions[I]);
|
||||
DeferredInlineMethodDefinitions.clear();
|
||||
|
||||
return true;
|
||||
|
|
|
@ -2,16 +2,16 @@
|
|||
|
||||
// <rdar://problem/8684363>: clang++ not respecting __attribute__((used)) on destructors
|
||||
struct X0 {
|
||||
// CHECK: define linkonce_odr {{.*}} @_ZN2X0C1Ev
|
||||
// CHECK-DAG: define linkonce_odr {{.*}} @_ZN2X0C1Ev
|
||||
__attribute__((used)) X0() {}
|
||||
// CHECK: define linkonce_odr {{.*}} @_ZN2X0D1Ev
|
||||
// CHECK-DAG: define linkonce_odr {{.*}} @_ZN2X0D1Ev
|
||||
__attribute__((used)) ~X0() {}
|
||||
};
|
||||
|
||||
// PR19743: not emitting __attribute__((used)) inline methods in nested classes.
|
||||
struct X1 {
|
||||
struct Nested {
|
||||
// CHECK: define linkonce_odr {{.*}} @_ZN2X16Nested1fEv
|
||||
// CHECK-DAG: define linkonce_odr {{.*}} @_ZN2X16Nested1fEv
|
||||
void __attribute__((used)) f() {}
|
||||
};
|
||||
};
|
||||
|
@ -22,6 +22,6 @@ struct X2 {
|
|||
void __attribute__((used)) bar() { foo(); }
|
||||
void foo() { }
|
||||
|
||||
// CHECK: define linkonce_odr {{.*}} @_ZN2X23barEv
|
||||
// CHECK: define linkonce_odr {{.*}} @_ZN2X23fooEv
|
||||
// CHECK-DAG: define linkonce_odr {{.*}} @_ZN2X23barEv
|
||||
// CHECK-DAG: define linkonce_odr {{.*}} @_ZN2X23fooEv
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue