[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