зеркало из https://github.com/microsoft/clang.git
A constructor call should force class's debug info even if -flimit-debug-info is enabled.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@126246 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
6b7367e53c
Коммит
3ee36af5bb
|
@ -17,6 +17,7 @@
|
|||
#include "clang/AST/EvaluatedExprVisitor.h"
|
||||
#include "clang/AST/RecordLayout.h"
|
||||
#include "clang/AST/StmtCXX.h"
|
||||
#include "clang/Frontend/CodeGenOptions.h"
|
||||
|
||||
using namespace clang;
|
||||
using namespace CodeGen;
|
||||
|
@ -1140,6 +1141,16 @@ CodeGenFunction::EmitCXXConstructorCall(const CXXConstructorDecl *D,
|
|||
llvm::Value *This,
|
||||
CallExpr::const_arg_iterator ArgBeg,
|
||||
CallExpr::const_arg_iterator ArgEnd) {
|
||||
|
||||
CGDebugInfo *DI = getDebugInfo();
|
||||
if (DI && CGM.getCodeGenOpts().LimitDebugInfo) {
|
||||
// If debug info for this class has been emitted then this is the right time
|
||||
// to do so.
|
||||
const CXXRecordDecl *Parent = D->getParent();
|
||||
DI->getOrCreateRecordType(CGM.getContext().getTypeDeclType(Parent),
|
||||
Parent->getLocation());
|
||||
}
|
||||
|
||||
if (D->isTrivial()) {
|
||||
if (ArgBeg == ArgEnd) {
|
||||
// Trivial default constructor, no codegen required.
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
// RUN: %clang -emit-llvm -g -S %s -o - | FileCheck %s
|
||||
|
||||
// TAG_member is used to encode debug info for class constructor.
|
||||
// CHECK: TAG_member
|
||||
class A {
|
||||
public:
|
||||
int z;
|
||||
};
|
||||
|
||||
A *foo () {
|
||||
A *a = new A();
|
||||
return a;
|
||||
}
|
||||
|
Загрузка…
Ссылка в новой задаче