dwblaikie wrote:

Hit an msan use-of-uninitialized on an internal use case (a tool that uses 
Clang via API).

the test was compiling this source code:
```
#include <string>
namespace proto2 {
struct Message {};
}  // namespace proto2
struct FakeProto : proto2::Message {
  const std::string& getter() const { return str; }  // NOLINT
  static std::string str;
};
struct S {
  S(std::string) {}  // NOLINT
};
void UseS(S s) {}
const std::string& foo() {
  FakeProto fp;
  return fp.getter();
}
void baz() { UseS(foo()); }
std::string s = foo();
```

and failed in this stack:
```
   #0 0x7f1da36404cd in NoteFunctionCandidate 
third_party/llvm/llvm-project/clang/lib/Sema/SemaOverload.cpp:12113:35
    #1 0x7f1da36404cd in 
clang::OverloadCandidateSet::NoteCandidates(clang::Sema&, 
llvm::ArrayRef<clang::Expr*>, llvm::ArrayRef<clang::OverloadCandidate*>, 
llvm::StringRef, clang::SourceLocation) 
third_party/llvm/llvm-project/clang/lib/Sema/SemaOverload.cpp:12733:7
    #2 0x7f1da3207016 in clang::InitializationSequence::Diagnose(clang::Sema&, 
clang::InitializedEntity const&, clang::InitializationKind const&, 
llvm::ArrayRef<clang::Expr*>) 
third_party/llvm/llvm-project/clang/lib/Sema/SemaInit.cpp:9933:26
    #3 0x7f1da31fa0e2 in clang::InitializationSequence::Perform(clang::Sema&, 
clang::InitializedEntity const&, clang::InitializationKind const&, 
llvm::MutableArrayRef<clang::Expr*>, clang::QualType*) 
third_party/llvm/llvm-project/clang/lib/Sema/SemaInit.cpp:8705:5
    #4 0x7f1da2704fbe in clang::Sema::AddInitializerToDecl(clang::Decl*, 
clang::Expr*, bool) 
third_party/llvm/llvm-project/clang/lib/Sema/SemaDecl.cpp:13730:33
    #5 0x7f1da58cfea0 in 
clang::Parser::ParseDeclarationAfterDeclaratorAndAttributes(clang::Declarator&, 
clang::Parser::ParsedTemplateInfo const&, clang::Parser::ForRangeInit*) 
third_party/llvm/llvm-project/clang/lib/Parse/ParseDecl.cpp:2787:17
    #6 0x7f1da58c924b in clang::Parser::ParseDeclGroup(clang::ParsingDeclSpec&, 
clang::DeclaratorContext, clang::ParsedAttributes&, 
clang::Parser::ParsedTemplateInfo&, clang::SourceLocation*, 
clang::Parser::ForRangeInit*) 
third_party/llvm/llvm-project/clang/lib/Parse/ParseDecl.cpp:2480:7
    #7 0x7f1da5b06b4d in 
clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, 
clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) 
third_party/llvm/llvm-project/clang/lib/Parse/Parser.cpp:1249:10
    #8 0x7f1da5b058b0 in 
clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, 
clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) 
third_party/llvm/llvm-project/clang/lib/Parse/Parser.cpp:1271:12
    #9 0x7f1da5b0338b in 
clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, 
clang::ParsedAttributes&, clang::ParsingDeclSpec*) 
third_party/llvm/llvm-project/clang/lib/Parse/Parser.cpp:1074:14
    #10 0x7f1da5afe984 in 
clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, 
clang::Sema::ModuleImportState&) 
third_party/llvm/llvm-project/clang/lib/Parse/Parser.cpp:763:12
    #11 0x7f1da588c011 in clang::ParseAST(clang::Sema&, bool, bool) 
third_party/llvm/llvm-project/clang/lib/Parse/ParseAST.cpp:163:20
    #12 0x7f1da743f407 in clang::ASTFrontendAction::ExecuteAction() 
third_party/llvm/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1192:3
    #13 0x7f1da743dfab in clang::FrontendAction::Execute() 
third_party/llvm/llvm-project/clang/lib/Frontend/FrontendAction.cpp:1078:8
```

I realize this isn't exactly repro steps - the <string> included is from 
libc++, for what that's worth - I don't /think/ this build is using modules.

But providing this info in case it's sufficient information to diagnose the 
issue.

It seems to be the TookAddressOfOverload variable is used-uninitialized 
somewhere in this path.

(I don't actually have a clang-built-with-msan to test this further myself at 
the moment, but trying to figure out some bootstrapping issues to try to help 
narrow it down)

https://github.com/llvm/llvm-project/pull/93430
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to