A constructor call should force class's debug info even if -flimit-debug-info is enabled.

llvm-svn: 126246
This commit is contained in:
Devang Patel 2011-02-22 20:55:26 +00:00
parent ba9006df9e
commit b6ed369e77
2 changed files with 25 additions and 0 deletions

View File

@ -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.

View File

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