[llvm-bugs] [Bug 43737] New: Wrong incomplete type error when parsing on default parameter
via llvm-bugs
llvm-bugs at lists.llvm.org
Sun Oct 20 18:44:05 PDT 2019
https://bugs.llvm.org/show_bug.cgi?id=43737
Bug ID: 43737
Summary: Wrong incomplete type error when parsing on default
parameter
Product: clang
Version: 9.0
Hardware: PC
OS: Linux
Status: NEW
Severity: enhancement
Priority: P
Component: C++
Assignee: unassignedclangbugs at nondot.org
Reporter: manjian2006 at gmail.com
CC: blitzrakete at gmail.com, dgregor at apple.com,
erik.pilkington at gmail.com, llvm-bugs at lists.llvm.org,
richard-llvm at metafoo.co.uk
When compiling the following code:
```
template <class T>
class scoped_refptr {
public:
constexpr scoped_refptr() = default;
constexpr scoped_refptr(T* p) : ptr_(p) {
if (ptr_)
AddRef(ptr_);
}
protected:
T* ptr_ = nullptr;
private:
static void AddRef(T* ptr);
};
template <typename T>
void scoped_refptr<T>::AddRef(T* ptr) {
ptr->AddRef();
}
class SecurityOrigin;
class Policy {
virtual void UpdateContainerPolicy(
scoped_refptr<const SecurityOrigin> src_origin = nullptr);
};
```
The clang-9 says scoped_refptr<const SecurityOrigin> src_origin = nullptr
default parameter should reference the contructor of scoped_refptr<const
SecurityOrigin>, thus reference the incomplete type SecurityOrigin.
The backtraces are:
```
#0 clang::Sema::MarkFunctionReferenced (this=0xaf9b860, Loc=...,
Func=0x7ffff44ce5f8, MightBeOdrUse=true)
at ../tools/clang/lib/Sema/SemaExpr.cpp:15182
#1 0x00000000064bacdb in clang::Sema::MarkAnyDeclReferenced (this=0xaf9b860,
Loc=..., D=0x7ffff44ce5f8, MightBeOdrUse=true)
at ../tools/clang/lib/Sema/SemaExpr.cpp:16550
#2 0x00000000064f8215 in MarkExprReferenced (SemaRef=..., Loc=...,
D=0x7ffff44ce5f8, E=0x7ffff44ce9d8, MightBeOdrUse=true)
at ../tools/clang/lib/Sema/SemaExpr.cpp:16475
#3 0x00000000064b7c51 in clang::Sema::MarkDeclRefReferenced (this=0xaf9b860,
E=0x7ffff44ce9d8, Base=0x0)
at ../tools/clang/lib/Sema/SemaExpr.cpp:16509
#4 0x00000000064b776f in clang::Sema::BuildDeclRefExpr (this=0xaf9b860,
D=0x7ffff44ce5f8, Ty=..., VK=clang::VK_LValue, NameInfo=..., NNS=...,
FoundD=0x0, TemplateKWLoc=..., TemplateArgs=0x0) at
../tools/clang/lib/Sema/SemaExpr.cpp:1826
#5 0x00000000064b758b in clang::Sema::BuildDeclRefExpr (this=0xaf9b860,
D=0x7ffff44ce5f8, Ty=..., VK=clang::VK_LValue, NameInfo=...,
SS=0x7ffffffed0d8, FoundD=0x0, TemplateKWLoc=..., TemplateArgs=0x0) at
../tools/clang/lib/Sema/SemaExpr.cpp:1786
#6 0x00000000064bc53e in clang::Sema::BuildDeclarationNameExpr
(this=0xaf9b860, SS=..., NameInfo=..., D=0x7ffff44ce5f8, FoundD=0x0,
TemplateArgs=0x0, AcceptInvalidDecl=false) at
../tools/clang/lib/Sema/SemaExpr.cpp:3166
#7 0x0000000006b18fb3 in clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::RebuildDeclRefExpr (this=0x7ffffffee9a0,
QualifierLoc=..., VD=0x7ffff44ce5f8, NameInfo=..., TemplateArgs=0x0) at
../tools/clang/lib/Sema/TreeTransform.h:2176
#8 0x0000000006b18855 in clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformDeclRefExpr (this=0x7ffffffee9a0,
E=0xc4f5e60) at ../tools/clang/lib/Sema/TreeTransform.h:9238
#9 0x0000000006b087a4 in (anonymous
namespace)::TemplateInstantiator::TransformDeclRefExpr (this=0x7ffffffee9a0,
E=0xc4f5e60)
at ../tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:1428
#10 0x0000000006afc5eb in clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformExpr (this=0x7ffffffee9a0,
E=0xc4f5e60)
at tools/clang/include/clang/AST/StmtNodes.inc:919
#11 0x0000000006b06d15 in clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformCallExpr (this=0x7ffffffee9a0,
E=0xc4f5ec0)
at ../tools/clang/lib/Sema/TreeTransform.h:9576
#12 0x0000000006afc217 in clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformExpr (this=0x7ffffffee9a0,
E=0xc4f5ec0)
at tools/clang/include/clang/AST/StmtNodes.inc:765
#13 0x0000000006afb947 in clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformStmt (this=0x7ffffffee9a0,
S=0xc4f5ec0,
SDK=clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::SDK_Discarded) at
../tools/clang/lib/Sema/TreeTransform.h:3369
#14 0x0000000006b2f82c in clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformIfStmt (this=0x7ffffffee9a0,
S=0xc4f5ee8)
at ../tools/clang/lib/Sema/TreeTransform.h:6806
#15 0x0000000006afac0c in clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformStmt (this=0x7ffffffee9a0,
S=0xc4f5ee8,
SDK=clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::SDK_Discarded) at
tools/clang/include/clang/AST/StmtNodes.inc:121
#16 0x0000000006b1e87c in clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformCompoundStmt (this=0x7ffffffee9a0,
---Type <return> to continue, or q <return> to quit---
S=0xc4f5f00, IsStmtExpr=false) at
../tools/clang/lib/Sema/TreeTransform.h:6630
#17 0x0000000006b2dfd7 in clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformCompoundStmt (this=0x7ffffffee9a0,
S=0xc4f5f00) at ../tools/clang/lib/Sema/TreeTransform.h:6616
#18 0x0000000006afaa84 in clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::TransformStmt (this=0x7ffffffee9a0,
S=0xc4f5f00,
SDK=clang::TreeTransform<(anonymous
namespace)::TemplateInstantiator>::SDK_Discarded) at
tools/clang/include/clang/AST/StmtNodes.inc:73
#19 0x0000000006afa892 in clang::Sema::SubstStmt (this=0xaf9b860, S=0xc4f5f00,
TemplateArgs=...)
at ../tools/clang/lib/Sema/SemaTemplateInstantiate.cpp:2841
#20 0x0000000006b6218a in clang::Sema::InstantiateFunctionDefinition
(this=0xaf9b860, PointOfInstantiation=..., Function=0x7ffff44cb3e8,
Recursive=false, DefinitionRequired=false, AtEndOfTU=false) at
../tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp:4298
#21 0x00000000064f377e in clang::Sema::MarkFunctionReferenced (this=0xaf9b860,
Loc=..., Func=0x7ffff44cb3e8, MightBeOdrUse=true)
at ../tools/clang/lib/Sema/SemaExpr.cpp:15171
#22 0x0000000006379af8 in clang::Sema::BuildCXXConstructExpr (this=0xaf9b860,
ConstructLoc=..., DeclInitType=..., Constructor=0x7ffff44cb3e8,
Elidable=false, ExprArgs=..., HadMultipleCandidates=true,
IsListInitialization=false, IsStdInitListInitialization=false,
RequiresZeroInit=false, ConstructKind=0, ParenRange=...) at
../tools/clang/lib/Sema/SemaDeclCXX.cpp:13078
#23 0x000000000637999a in clang::Sema::BuildCXXConstructExpr (this=0xaf9b860,
ConstructLoc=..., DeclInitType=..., FoundDecl=0x7ffff44cb3e8,
Constructor=0x7ffff44cb3e8, Elidable=false, ExprArgs=...,
HadMultipleCandidates=true, IsListInitialization=false,
IsStdInitListInitialization=false, RequiresZeroInit=false, ConstructKind=0,
ParenRange=...) at ../tools/clang/lib/Sema/SemaDeclCXX.cpp:13055
#24 0x000000000637968b in clang::Sema::BuildCXXConstructExpr (this=0xaf9b860,
ConstructLoc=..., DeclInitType=..., FoundDecl=0x7ffff44cb3e8,
Constructor=0x7ffff44cb3e8, ExprArgs=..., HadMultipleCandidates=true,
IsListInitialization=false, IsStdInitListInitialization=false,
RequiresZeroInit=false, ConstructKind=0, ParenRange=...) at
../tools/clang/lib/Sema/SemaDeclCXX.cpp:13029
#25 0x00000000066ff4b7 in clang::InitializationSequence::Perform
(this=0x7fffffff0c38, S=..., Entity=..., Kind=..., Args=..., ResultType=0x0)
at ../tools/clang/lib/Sema/SemaInit.cpp:7699
#26 0x00000000063450a9 in clang::Sema::SetParamDefaultArgument (this=0xaf9b860,
Param=0x7ffff4498a70, Arg=0x7ffff44cafb8, EqualLoc=...)
at ../tools/clang/lib/Sema/SemaDeclCXX.cpp:268
#27 0x00000000063454c1 in clang::Sema::ActOnParamDefaultArgument
(this=0xaf9b860, param=0x7ffff4498a70, EqualLoc=..., DefaultArg=0x7ffff44cafb8)
at ../tools/clang/lib/Sema/SemaDeclCXX.cpp:336
#28 0x0000000005e41835 in clang::Parser::ParseLexedMethodDeclaration
(this=0xafa22f0, LM=...)
at ../tools/clang/lib/Parse/ParseCXXInlineMethods.cpp:360
#29 0x0000000005e41124 in
clang::Parser::LateParsedMethodDeclaration::ParseLexedMethodDeclarations
(this=0xbe79580)
at ../tools/clang/lib/Parse/ParseCXXInlineMethods.cpp:247
#30 0x0000000005e40bf9 in clang::Parser::ParseLexedMethodDeclarations
(this=0xafa22f0, Class=...)
at ../tools/clang/lib/Parse/ParseCXXInlineMethods.cpp:282
#31 0x0000000005e7ab2c in clang::Parser::ParseCXXMemberSpecification
(this=0xafa22f0, RecordLoc=..., AttrFixitLoc=..., Attrs=..., TagType=23,
---Type <return> to continue, or q <return> to quit---
TagDecl=0x7ffff4497ab0) at ../tools/clang/lib/Parse/ParseDeclCXX.cpp:3346
#32 0x0000000005e790bd in clang::Parser::ParseClassSpecifier (this=0xafa22f0,
TagTokKind=clang::tok::TokenKind::kw_class, StartLoc=..., DS=...,
TemplateInfo=..., AS=clang::AS_none, EnteringContext=true,
DSC=clang::Parser::DeclSpecContext::DSC_top_level, Attributes=...)
at ../tools/clang/lib/Parse/ParseDeclCXX.cpp:1954
#33 0x0000000005e52b59 in clang::Parser::ParseDeclarationSpecifiers
(this=0xafa22f0, DS=..., TemplateInfo=..., AS=clang::AS_none,
DSContext=clang::Parser::DeclSpecContext::DSC_top_level, LateAttrs=0x0) at
../tools/clang/lib/Parse/ParseDecl.cpp:3816
#34 0x0000000005e2e8dd in clang::Parser::ParseDeclOrFunctionDefInternal
(this=0xafa22f0, attrs=..., DS=..., AS=clang::AS_none)
at ../tools/clang/lib/Parse/Parser.cpp:1001
#35 0x0000000005e2e4d0 in clang::Parser::ParseDeclarationOrFunctionDefinition
(this=0xafa22f0, attrs=..., DS=0x0, AS=clang::AS_none)
at ../tools/clang/lib/Parse/Parser.cpp:1111
#36 0x0000000005e2dd99 in clang::Parser::ParseExternalDeclaration
(this=0xafa22f0, attrs=..., DS=0x0) at ../tools/clang/lib/Parse/Parser.cpp:931
#37 0x0000000005e71a0c in clang::Parser::ParseInnerNamespace (this=0xafa22f0,
InnerNSs=..., index=0, InlineLoc=..., attrs=..., Tracker=...)
at ../tools/clang/lib/Parse/ParseDeclCXX.cpp:246
#38 0x0000000005e713a8 in clang::Parser::ParseNamespace (this=0xafa22f0,
Context=clang::DeclaratorContext::FileContext, DeclEnd=...,
InlineLoc=...) at ../tools/clang/lib/Parse/ParseDeclCXX.cpp:224
#39 0x0000000005e4ef50 in clang::Parser::ParseDeclaration (this=0xafa22f0,
Context=clang::DeclaratorContext::FileContext, DeclEnd=..., attrs=...)
at ../tools/clang/lib/Parse/ParseDecl.cpp:1753
#40 0x0000000005e2d8e0 in clang::Parser::ParseExternalDeclaration
(this=0xafa22f0, attrs=..., DS=0x0) at ../tools/clang/lib/Parse/Parser.cpp:864
#41 0x0000000005e2c05c in clang::Parser::ParseTopLevelDecl (this=0xafa22f0,
Result=..., IsFirstDecl=false)
at ../tools/clang/lib/Parse/Parser.cpp:682
#42 0x0000000005e27544 in clang::ParseAST (S=..., PrintStats=false,
SkipFunctionBodies=false) at ../tools/clang/lib/Parse/ParseAST.cpp:158
#43 0x0000000003b5d03c in clang::ASTFrontendAction::ExecuteAction
(this=0xaf43550) at ../tools/clang/lib/Frontend/FrontendAction.cpp:1041
#44 0x00000000044f2390 in clang::CodeGenAction::ExecuteAction (this=0xaf43550)
at ../tools/clang/lib/CodeGen/CodeGenAction.cpp:1059
#45 0x0000000003b5ca01 in clang::FrontendAction::Execute (this=0xaf43550) at
../tools/clang/lib/Frontend/FrontendAction.cpp:934
#46 0x0000000003af1d79 in clang::CompilerInstance::ExecuteAction
(this=0xaefc250, Act=...)
at ../tools/clang/lib/Frontend/CompilerInstance.cpp:944
#47 0x0000000003cea08c in clang::ExecuteCompilerInvocation (Clang=0xaefc250) at
../tools/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:291
#48 0x000000000120310c in cc1_main (Argv=..., Argv0=0x7fffffffa963
"/media/linzj/normal/linzj/src/llvm-project/llvm/building-debug/bin/clang-9",
MainAddr=0x11f5900 <GetExecutablePath[abi:cxx11](char const*, bool)>) at
../tools/clang/tools/driver/cc1_main.cpp:249
#49 0x00000000011f6cc7 in ExecuteCC1Tool (argv=..., Tool=...) at
../tools/clang/tools/driver/driver.cpp:309
#50 0x00000000011f605c in main (argc_=768, argv_=0x7fffffff8da8) at
../tools/clang/tools/driver/driver.cpp:381
```
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20191021/26015318/attachment-0001.html>
More information about the llvm-bugs
mailing list