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

Reply via email to