[PATCH] D60387: FileCheck [7/12]: Arbitrary long numeric expressions

Alexander Richardson via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 12 08:25:02 PDT 2019


arichardson added a comment.

Thanks for your work on this! Looking forward to be able to use these new features the next time I update our fork.



================
Comment at: llvm/lib/Support/FileCheck.cpp:108
+  VariableProperties VarProperties = {Name, IsPseudo};
+  return VarProperties;
 }
----------------
thopre wrote:
> thopre wrote:
> > jhenderson wrote:
> > > You might be able to just do `return {Name, IsPseudo}` to avoid the temporary.
> > I tried but it didn't work. I think it would if I was returning the structure, but here I'm returning an Expected.
> > 
> > As per 6.6.3 C++11 draft:
> > "A return statement with a braced-init-list initializes the object or reference to be returned from the function by copy-list-initialization (8.5.4) from the specified initializer list."
> > 
> > So it tries to build an Expected with that initialization list which fails because I think an Expected<foo> only accepts a Foo.
> Yes, that's it:
> 
> /home/thomasp/repos/llvm-project/llvm/lib/Support/FileCheck.cpp:107:10: error: no matching constructor for initialization of 'Expected<FileCheckPattern::VariableProperties>'
>   return {Name, IsPseudo};
>          ^~~~~~~~~~~~~~~~
> /home/thomasp/repos/llvm-project/llvm/include/llvm/Support/Error.h:474:3: note: candidate template ignored: requirement 'std::is_convertible<StringRef &, VariableProperties>::value' was not satisfied [with OtherT = llvm::StringRef &]
>   Expected(OtherT &&Val,
>   ^
> 
> It tries to convert Name into a VariableProperties and fails. All the other constructors expect an Error or another Expected and fail as well.
Maybe `return VariableProperties{Name, IsPseudo}`would work? 


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D60387/new/

https://reviews.llvm.org/D60387





More information about the llvm-commits mailing list