[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[creduce-dev] puzzling clang_delta crash



See below an interaction I just had with clang_delta. It crashes when run on a variant but then fails to crash when that file is renamed.

Perhaps clang is behaving differently on a .cpp file vs. a file with no extension?

In any case, C-Reduce's current strategy of copying a crash-inducing file into the cwd is going to need to be revised for the case of multi-file reduction. I plan to do this by making a copy of the temp dir where the crash-inducing variant was being evaluated. As a side effect, we'll no longer be renaming files.

John



$ "/home/regehr/creduce-install/libexec/clang_delta" --transformation=remove-nested-function --counter=1 hello.cpp
Segmentation fault (core dumped)
$ "/home/regehr/creduce-install/libexec/clang_delta" --transformation=remove-nested-function --counter=1 creduce_bug_634227
Error: The counter value exceeded the number of transformation instances!
$ diff hello.cpp creduce_bug_634227
$ cat hello.cpp
#include "ostream"
namespace std _GLIBCXX_VISIBILITY(default) {
        		   extern ostream cout;
        		   static ios_base::Init __ioinit;
         _GLIBCXX_END_NAMESPACE_VERSION }
int main() {
           std::cout << "Hello World!++" << std::endl;
         }
$ cat ostream
 #include "iosfwd"
#include "exception"
#include "char_traits.h"
#include "localefwd.h"
#include "ios_base.h"
#include "basic_ios.h"
namespace std _GLIBCXX_VISIBILITY(default) {
_GLIBCXX_BEGIN_NAMESPACE_VERSION template<typename _CharT, typename _Traits> class basic_ostream : virtual public basic_ios<_CharT, _Traits> {
          public:       typedef _CharT			 		char_type;
            typedef basic_ostream		__ostream_type;
__ostream_type& operator<<(__ostream_type& (__ostream_type&)) ;
            __ostream_type&       put;
            __ostream_type&       flush;
          };
/** * @brief String inserters * @param __out An output stream. * @param __s A character string. * @return out * @pre @p __s must be a non-NULL pointer * * Behaves like one of the formatted arithmetic inserters described in * std::basic_ostream. After constructing a sentry object with good * status, this function inserts @c traits::length characters starting * at @p __s, widened if necessary, followed by any required padding . @c __out.width is then called. */ template<typename _CharT, typename _Traits> inline basic_ostream<_CharT, _Traits>& operator<<(basic_ostream<_CharT, _Traits>& __out, const _CharT* __s) {
            if (!__s) 	__out.setstate(ios_base::badbit);
else __ostream_insert(__out, __s, static_cast<streamsize>(_Traits::length(__s)));
            return __out;
          }
/** * @brief Write a newline and flush the stream. * * This manipulator is often mistakenly used when a simple newline is * desired, leading to poor buffering performance. See * http: * for more on this subject. */ template<typename _CharT, typename _Traits> inline basic_ostream<_CharT, _Traits>& endl(basic_ostream<_CharT, _Traits>& __os) ; template<typename _CharT, typename _Traits> inline basic_ostream<_CharT, _Traits>& flush(basic_ostream<_CharT, _Traits>& __os) ;
#if __cplusplus >= 201103L
#endif
}