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:
Devang Patel 2011-02-22 20:55:26 +00:00
Родитель 6b7367e53c
Коммит 3ee36af5bb
2 изменённых файлов: 25 добавлений и 0 удалений

Просмотреть файл

@ -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;
}