[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
}