dokyungs added a comment.

In D83494#2150643 <https://reviews.llvm.org/D83494#2150643>, @morehouse wrote:

> In D83494#2148868 <https://reviews.llvm.org/D83494#2148868>, @dokyungs wrote:
>
> > Addressed Matt's comments.
> >
> > A major change in this round that needs explanation is introduction of 
> > FuzzerPlatform.h. Previously I defined `strstr` and `strcasestr` with 
> > `extern "C++"` to workaround conflicting definition errors resulting from 
> > including <string.h>. But since including it is not necessary when 
> > compiling this interceptor module, this patch now separates out platform 
> > related macros from FuzzerDef.h into FuzzerPlatform.h, and the module 
> > includes FuzzerPlatform.h, not FuzzerDef.h.
>
>
> What was the conflicting definition error?  Does string.h have inline 
> definitions for those functions?


I was misled; the error is actually ambiguating new "declarations", not 
definitions. The exact error message goes like:

  error: ambiguating new declaration of ‘char* strcasestr(const char*, const 
char*)’
    104 | ATTRIBUTE_INTERFACE char *strcasestr(const char *s1, const char *s2) {
        |                           ^~~~~~~~~~
  In file included from include/c++/v1/string.h:60,
                   from include/c++/v1/cstring:60,
                   from include/c++/v1/algorithm:641,
                   from include/c++/v1/__string:57,
                   from include/c++/v1/string_view:175,
                   from include/c++/v1/string:506,
                   from FuzzerInterceptors.cpp:14:
  /usr/include/string.h:356:26: note: old declaration ‘const char* 
strcasestr(const char*, const char*)’
    356 | extern "C++" const char *strcasestr (const char *__haystack,
        |                          ^~~~~~~~~~

C++'s declarations of strstr/strcasestr each have two different versions (const 
v. non const), and neither of them matches C's strstr/strcasestr declarations. 
So I could either (i) make libFuzzer's declarations of strstr/strcasestr match 
one of C++ versions (for this reason there was "extern C++ ..."), or (ii) make 
them match C declarations of strstr/strcasestr and remove C++ declarations by 
not including string.h. I realized that (ii) is a simpler solution, so I 
changed the code that way.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D83494



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to