You can also cast it to (const char *). I cant remember if this is
hard to fix or not. I'll check it out. File a bug if you like.
Nate
On Sat, Jun 21, 2008 at 9:34 AM, Gabe Black <[EMAIL PROTECTED]> wrote:
> I've been dealing with a problem today where the warn macro seems to
> have trouble using a character array directly as an argument as apposed
> to a char *. This code:
>
> char cleanedString[length + 1];
> cleanedString[length] = 0;
>
> if (str.length() > length) {
> memcpy(cleanedString, str.c_str(), length);
> warn("Intel MP configuration table string \"%s\" "
> "will be truncated to \"%s\".\n", str, cleanedString);
>
> produces the error:
>
> build/X86_FS/arch/x86/bios/intelmp.cc:95: error: no matching function
> for call to '__warn(const char [15], const char [38], int, const char
> [69], const char*, char [(((long unsigned int)(((long int)(length + 1))
> - 1)) + 1u)])'
> build/X86_FS/base/misc.hh:94: note: candidates are: void __warn(const
> char*, const char*, int, const char*, VarArgs::Argument<cp::Print>,
> VarArgs::Argument<cp::Print>, VarArgs::Argument<cp::Print>,
> VarArgs::Argument<cp::Print>, VarArgs::Argument<cp::Print>,
> VarArgs::Argument<cp::Print>, VarArgs::Argument<cp::Print>,
> VarArgs::Argument<cp::Print>, VarArgs::Argument<cp::Print>,
> VarArgs::Argument<cp::Print>, VarArgs::Argument<cp::Print>,
> VarArgs::Argument<cp::Print>, VarArgs::Argument<cp::Print>,
> VarArgs::Argument<cp::Print>, VarArgs::Argument<cp::Print>,
> VarArgs::Argument<cp::Print>)
> build/X86_FS/base/misc.hh:97: note: void __warn(const
> char*, const char*, int, const std::string&,
> VarArgs::Argument<cp::Print>, VarArgs::Argument<cp::Print>,
> VarArgs::Argument<cp::Print>, VarArgs::Argument<cp::Print>,
> VarArgs::Argument<cp::Print>, VarArgs::Argument<cp::Print>,
> VarArgs::Argument<cp::Print>, VarArgs::Argument<cp::Print>,
> VarArgs::Argument<cp::Print>, VarArgs::Argument<cp::Print>,
> VarArgs::Argument<cp::Print>, VarArgs::Argument<cp::Print>,
> VarArgs::Argument<cp::Print>, VarArgs::Argument<cp::Print>,
> VarArgs::Argument<cp::Print>, VarArgs::Argument<cp::Print>)
> createSimObjectParam(["build/X86_FS/params/Repl.hh"], ["'Repl'"])
>
>
> while:
>
> char cleanedString[length + 1];
> cleanedString[length] = 0;
>
> if (str.length() > length) {
> memcpy(cleanedString, str.c_str(), length);
> warn("Intel MP configuration table string \"%s\" "
> "will be truncated to \"%s\".\n", str, &(cleanedString[0]));
>
> seems to compile fine. The only difference is in the final warn
> argument. I looked the code in misc.hh over but it wasn't immediately
> obvious what the problem was.
>
> Gabe
> _______________________________________________
> m5-dev mailing list
> [email protected]
> http://m5sim.org/mailman/listinfo/m5-dev
>
>
_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev