Hello community,
here is the log from the commit of package yast2-core for openSUSE:Factory checked in at 2016-06-07 23:44:10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/yast2-core (Old)
and /work/SRC/openSUSE:Factory/.yast2-core.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "yast2-core"
Changes:
--------
--- /work/SRC/openSUSE:Factory/yast2-core/yast2-core.changes 2016-03-04 19:30:10.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.yast2-core.new/yast2-core.changes 2016-06-07 23:44:12.000000000 +0200
@@ -1,0 +2,7 @@
+Thu Jun 2 13:46:02 UTC 2016 - mvidner@suse.com
+
+- Optionally build with Clang instead of GCC (via bcond_with clang)
+- Fixed most of Clang warnings (bsc#982942)
+- 3.1.23
+
+-------------------------------------------------------------------
Old:
----
yast2-core-3.1.22.tar.bz2
New:
----
yast2-core-3.1.23.tar.bz2
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ yast2-core.spec ++++++
--- /var/tmp/diff_new_pack.WfJBG7/_old 2016-06-07 23:44:13.000000000 +0200
+++ /var/tmp/diff_new_pack.WfJBG7/_new 2016-06-07 23:44:13.000000000 +0200
@@ -16,6 +16,10 @@
#
+# Optionally build with llvm-clang instead of gcc
+# because we are interested in the warnings it gives.
+%bcond_with clang
+
# Optionally treat C/C++ warnings as errors.
# It is off by default so that it will not block mass tests of new GCC
# but we want to enable it in a side repo
@@ -23,7 +27,7 @@
%bcond_with werror
Name: yast2-core
-Version: 3.1.22
+Version: 3.1.23
Release: 0
Url: https://github.com/yast/yast-core
@@ -32,7 +36,11 @@
# obviously
BuildRequires: boost-devel
+%if %{with clang}
+BuildRequires: llvm-clang
+%else
BuildRequires: gcc-c++
+%endif
BuildRequires: libtool
# we have a parser
BuildRequires: bison
@@ -103,6 +111,14 @@
export CXXFLAGS="${RPM_OPT_FLAGS} -Werror"
%endif
+%if %{with clang}
+export CC=clang CXX=clang++
+
+# warning/error: argument unused during compilation
+CFLAGS="${CFLAGS/-grecord-gcc-switches/}"
+CXXFLAGS="${CXXFLAGS/-grecord-gcc-switches/}"
+%endif
+
%yast_build
%install
++++++ yast2-core-3.1.22.tar.bz2 -> yast2-core-3.1.23.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-core-3.1.22/agent-ini/src/IniFile.h new/yast2-core-3.1.23/agent-ini/src/IniFile.h
--- old/yast2-core-3.1.22/agent-ini/src/IniFile.h 2016-03-03 13:08:08.000000000 +0100
+++ new/yast2-core-3.1.23/agent-ini/src/IniFile.h 2016-06-03 09:31:47.000000000 +0200
@@ -200,7 +200,7 @@
enum IniType { VALUE, SECTION,};
-struct IniContainerElement;
+class IniContainerElement;
typedef list<IniContainerElement> IniContainer;
typedef IniContainer::iterator IniIterator;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-core-3.1.22/agent-ini/src/IniParser.cc new/yast2-core-3.1.23/agent-ini/src/IniParser.cc
--- old/yast2-core-3.1.22/agent-ini/src/IniParser.cc 2016-03-03 13:08:08.000000000 +0100
+++ new/yast2-core-3.1.23/agent-ini/src/IniParser.cc 2016-06-03 09:31:47.000000000 +0200
@@ -1023,6 +1023,9 @@
return 0;
}
+std::string format (const char * format, ...)
+ __attribute__ ((format (printf, 1, 2)));
+
/** sprintf to a std::string, throwing runtime_error on OOM */
std::string format (const char * format, ...) {
// copied from y2util/stringutil.h but added the throw
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-core-3.1.22/libscr/src/include/scr/Y2AgentComponent.h new/yast2-core-3.1.23/libscr/src/include/scr/Y2AgentComponent.h
--- old/yast2-core-3.1.22/libscr/src/include/scr/Y2AgentComponent.h 2016-03-03 13:08:09.000000000 +0100
+++ new/yast2-core-3.1.23/libscr/src/include/scr/Y2AgentComponent.h 2016-06-03 09:31:47.000000000 +0200
@@ -16,6 +16,7 @@
#include
#include
#include
+#include
class SCRAgent;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-core-3.1.22/liby2/src/include/y2/Y2PluginComponent.h new/yast2-core-3.1.23/liby2/src/include/y2/Y2PluginComponent.h
--- old/yast2-core-3.1.22/liby2/src/include/y2/Y2PluginComponent.h 2016-03-03 13:08:09.000000000 +0100
+++ new/yast2-core-3.1.23/liby2/src/include/y2/Y2PluginComponent.h 2016-06-03 09:31:47.000000000 +0200
@@ -62,7 +62,12 @@
/**
* The component level the plugin was started in.
*/
+#ifdef __clang__
+ int level __attribute__((__unused__));
+ // 'level' can be removed for SLE13; now keeping it for ABI.
+#else
int level;
+#endif
/**
* Handle of the dynamic loaded library.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-core-3.1.22/liby2util-r/src/MemUsage.cc new/yast2-core-3.1.23/liby2util-r/src/MemUsage.cc
--- old/yast2-core-3.1.22/liby2util-r/src/MemUsage.cc 2016-03-03 13:08:09.000000000 +0100
+++ new/yast2-core-3.1.23/liby2util-r/src/MemUsage.cc 2016-06-03 09:31:47.000000000 +0200
@@ -51,11 +51,12 @@
ie = m_mu_instances->end ();
for (; ii != ie; ++ii)
{
- const char * name = typeid (**ii).name ();
+ MemUsage * tracked_ptr = *ii;
+ const char * name = typeid (*tracked_ptr).name ();
std::string dename = demangle (name);
if (m_mu_size.find (dename) == m_mu_size.end())
{
- m_mu_size[dename] = (**ii).mem_size();
+ m_mu_size[dename] = (*tracked_ptr).mem_size();
}
++ m_mu_count[dename];
}
@@ -83,7 +84,8 @@
ie = m_mu_instances->end ();
for (; ii != ie; ++ii)
{
- std::string dname = demangle (typeid (**ii).name ());
+ MemUsage * tracked_ptr = *ii;
+ std::string dname = demangle (typeid (*tracked_ptr).name ());
if (dname == aname)
{
fprintf (stderr, "p *(%s *)%p\n", aname, *ii);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-core-3.1.22/liby2util-r/src/include/y2util/stringutil.h new/yast2-core-3.1.23/liby2util-r/src/include/y2util/stringutil.h
--- old/yast2-core-3.1.22/liby2util-r/src/include/y2util/stringutil.h 2016-03-03 13:08:09.000000000 +0100
+++ new/yast2-core-3.1.23/liby2util-r/src/include/y2util/stringutil.h 2016-06-03 09:31:47.000000000 +0200
@@ -46,6 +46,9 @@
TRIM = (L_TRIM|R_TRIM)
};
+inline std::string vform( const char * format, va_list ap )
+ __attribute__ ((format (printf, 1, 0)));
+
inline std::string vform( const char * format, va_list ap ) {
char * buf = 0;
std::string val;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-core-3.1.22/liby2util-r/src/y2log.cc new/yast2-core-3.1.23/liby2util-r/src/y2log.cc
--- old/yast2-core-3.1.22/liby2util-r/src/y2log.cc 2016-03-03 13:08:09.000000000 +0100
+++ new/yast2-core-3.1.23/liby2util-r/src/y2log.cc 2016-06-03 09:31:47.000000000 +0200
@@ -173,6 +173,10 @@
*/
string y2_logfmt_common(bool simple, const string& component, const char *file,
const int line, const char *function, const char *format, va_list ap)
+ __attribute__ ((format (printf, 6, 0)));
+
+string y2_logfmt_common(bool simple, const string& component, const char *file,
+ const int line, const char *function, const char *format, va_list ap)
{
/* Prepare the log text */
string logtext = stringutil::vform(format, ap);
@@ -265,6 +269,10 @@
void y2_vlogger_function(loglevel_t level, const string& component, const char *file,
+ const int line, const char *function, const char *format, va_list ap)
+ __attribute__ ((format (printf, 6, 0)));
+
+void y2_vlogger_function(loglevel_t level, const string& component, const char *file,
const int line, const char *function, const char *format, va_list ap)
{
string common = y2_logfmt_common (log_simple,
@@ -287,6 +295,10 @@
void y2_vlogger_blanik(loglevel_t level, const string& component, const char *file,
const int line, const char *function, const char *format, va_list ap)
+ __attribute__ ((format (printf, 6, 0)));
+
+void y2_vlogger_blanik(loglevel_t level, const string& component, const char *file,
+ const int line, const char *function, const char *format, va_list ap)
{
string common = y2_logfmt_common (log_simple,
component, file, line, function,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-core-3.1.22/libycp/src/YBlock.cc new/yast2-core-3.1.23/libycp/src/YBlock.cc
--- old/yast2-core-3.1.22/libycp/src/YBlock.cc 2016-03-03 13:08:09.000000000 +0100
+++ new/yast2-core-3.1.23/libycp/src/YBlock.cc 2016-06-03 09:31:47.000000000 +0200
@@ -481,7 +481,7 @@
{
// first, create reverse map of cases
int statementcount = statementCount ();
- YCPValue values[statementcount];
+ YCPValue * values = new YCPValue[statementcount];
for (int i = 0; i < statementcount; i++)
values[i] = YCPNull ();
@@ -514,6 +514,7 @@
stmt = stmt->next;
index++;
}
+ delete[] values;
s += "\n}\n";
return s;
@@ -525,7 +526,8 @@
{
// first, create reverse map of cases
int statementcount = statementCount ();
- vector<YCPValue> values[statementcount];
+
+ vector<YCPValue> * values = new vector<YCPValue>[statementcount];
for (map::iterator it = cases.begin ();
it != cases.end (); it++ )
@@ -566,6 +568,7 @@
index++;
}
str << closing_tag;
+ delete[] values;
return str;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-core-3.1.22/libycp/src/YCPBuiltinString.cc new/yast2-core-3.1.23/libycp/src/YCPBuiltinString.cc
--- old/yast2-core-3.1.22/libycp/src/YCPBuiltinString.cc 2016-03-03 13:08:09.000000000 +0100
+++ new/yast2-core-3.1.23/libycp/src/YCPBuiltinString.cc 2016-06-03 09:31:47.000000000 +0200
@@ -299,28 +299,28 @@
if (s->isAscii())
{
string ss = s->value ();
- string::size_type start = i1->value();
+ long long start = i1->value();
- if (start < 0 || start > ss.size())
+ if (start < 0 || start > (long long)ss.size())
{
ycp2error("Substring index out of range");
return YCPString ("");
}
- return YCPString(ss.substr(start, string::npos));
+ return YCPString(ss.substr((string::size_type) start, string::npos));
}
else
{
wstring ss = s->wvalue();
- wstring::size_type start = i1->value();
+ long long start = i1->value();
- if (start < 0 || start > ss.size())
+ if (start < 0 || start > (long long)ss.size())
{
ycp2error("Substring index out of range");
return YCPString("");
}
- return YCPString(ss.substr(start, wstring::npos));
+ return YCPString(ss.substr((wstring::size_type) start, wstring::npos));
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-core-3.1.22/libycp/src/YCPMap.cc new/yast2-core-3.1.23/libycp/src/YCPMap.cc
--- old/yast2-core-3.1.22/libycp/src/YCPMap.cc 2016-03-03 13:08:09.000000000 +0100
+++ new/yast2-core-3.1.23/libycp/src/YCPMap.cc 2016-06-03 09:31:47.000000000 +0200
@@ -178,7 +178,7 @@
{
// equal length ==> pairwise comparison
for( YCPMap::const_iterator pos_this = begin(), pos_m = m->begin();
- pos_this != end(), pos_m != m->end();
+ pos_this != end();
++pos_this, ++pos_m )
{
// compare keys
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-core-3.1.22/libycp/src/YExpression.cc new/yast2-core-3.1.23/libycp/src/YExpression.cc
--- old/yast2-core-3.1.22/libycp/src/YExpression.cc 2016-03-03 13:08:09.000000000 +0100
+++ new/yast2-core-3.1.23/libycp/src/YExpression.cc 2016-06-03 09:31:47.000000000 +0200
@@ -3126,7 +3126,7 @@
}
}
- YCPValue evaluated_params [m_next_param_id];
+ YCPValue* evaluated_params = new YCPValue[m_next_param_id];
for (unsigned int p = 0; p < m_next_param_id ; p++)
{
@@ -3137,6 +3137,7 @@
if (value.isNull())
{
ycp2error ("Parameter eval failed (%s)", m_parameters[p]->toString().c_str());
+ delete[](evaluated_params);
return value;
}
@@ -3160,6 +3161,7 @@
if (YaST::ee.endlessRecursion())
{
ycp2error ("Returning nil instead of calling the function.");
+ delete[](evaluated_params);
return YCPVoid ();
}
@@ -3172,6 +3174,8 @@
YaST::ee.setFilename(filename);
YaST::ee.popframe();
+ // FIXME: did the frame need ep to exist? otherwise we could delete it before evaluateCall
+ delete[](evaluated_params);
#if DO_DEBUG
y2debug("evaluate done (%s) = '%s'", qualifiedName ().c_str(), value.isNull() ? "NULL" : value->toString().c_str());
@@ -3266,7 +3270,7 @@
// FIXME: this could fail
m_functioncall->reset ();
- YCPValue m_params [m_next_param_id];
+ YCPValue * m_params = new YCPValue[m_next_param_id];
for (unsigned int p = 0; p < m_next_param_id ; p++)
{
@@ -3277,6 +3281,7 @@
if (value.isNull())
{
ycp2error ("Parameter eval failed (%s)", m_parameters[p]->toString().c_str());
+ delete[] m_params;
return value;
}
@@ -3292,6 +3297,7 @@
{
m_functioncall->attachParameter (m_params[p], p);
}
+ delete[] m_params; // can now already? why no frame push?
// save the context info
int linenumber = YaST::ee.linenumber();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-core-3.1.22/libycp/src/include/ycp/Parser.h new/yast2-core-3.1.23/libycp/src/include/ycp/Parser.h
--- old/yast2-core-3.1.22/libycp/src/include/ycp/Parser.h 2016-03-03 13:08:09.000000000 +0100
+++ new/yast2-core-3.1.23/libycp/src/include/ycp/Parser.h 2016-06-03 09:31:47.000000000 +0200
@@ -29,9 +29,9 @@
#include "ycp/YCode.h"
class Scanner;
-class blockstack_t;
-class scannerstack_t;
-class switchstack_t;
+struct blockstack_t;
+struct scannerstack_t;
+struct switchstack_t;
class YBlock;
/**
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-core-3.1.22/libycp/src/include/ycp/YCPMap.h new/yast2-core-3.1.23/libycp/src/include/ycp/YCPMap.h
--- old/yast2-core-3.1.22/libycp/src/include/ycp/YCPMap.h 2016-03-03 13:08:09.000000000 +0100
+++ new/yast2-core-3.1.23/libycp/src/include/ycp/YCPMap.h 2016-06-03 09:31:47.000000000 +0200
@@ -30,7 +30,7 @@
// Only for backwards compatibility. See mail from aschnell on yast-devel on
// 2009-01-07. http://lists.opensuse.org/yast-devel/2009-01/msg00016.html
typedef map YCPValueYCPValueMap;
-class YCPMapIterator;
+struct YCPMapIterator;
/**
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-core-3.1.22/libycp/src/scanner.ll new/yast2-core-3.1.23/libycp/src/scanner.ll
--- old/yast2-core-3.1.22/libycp/src/scanner.ll 2016-03-03 13:08:09.000000000 +0100
+++ new/yast2-core-3.1.23/libycp/src/scanner.ll 2016-06-03 09:31:47.000000000 +0200
@@ -19,6 +19,12 @@
%{
+#ifdef __clang__
+// There are many "register" variables declared in generated flex code
+// which we cannot affect, but Clang warns about them. Shut that up.
+#pragma clang diagnostic ignored "-Wdeprecated-register"
+#endif
+
#include <list>
#include <string>
#include <sstream>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-core-3.1.22/libycp/testsuite/tests/builtin/Builtin-String.err new/yast2-core-3.1.23/libycp/testsuite/tests/builtin/Builtin-String.err
--- old/yast2-core-3.1.22/libycp/testsuite/tests/builtin/Builtin-String.err 2016-03-03 13:08:09.000000000 +0100
+++ new/yast2-core-3.1.23/libycp/testsuite/tests/builtin/Builtin-String.err 2016-06-03 09:31:47.000000000 +0200
@@ -128,36 +128,53 @@
[Interpreter] tests/builtin/Builtin-String.ycp:59 Substring index out of range
Parsed:
----------------------------------------------------------------------
+substring ("some text", -1)
+----------------------------------------------------------------------
+[Interpreter] tests/builtin/Builtin-String.ycp:61 Substring index out of range
+Parsed:
+----------------------------------------------------------------------
+substring ("some text", 5, 0)
+----------------------------------------------------------------------
+Parsed:
+----------------------------------------------------------------------
+substring ("some text", 5, 42)
+----------------------------------------------------------------------
+Parsed:
+----------------------------------------------------------------------
+substring ("some text", 5, -42)
+----------------------------------------------------------------------
+Parsed:
+----------------------------------------------------------------------
"** lsubstring **"
----------------------------------------------------------------------
-[Parser] tests/builtin/Builtin-String.ycp:64 Warning: lsubstring(...) is deprecated, please fix
+[Parser] tests/builtin/Builtin-String.ycp:68 Warning: lsubstring(...) is deprecated, please fix
Parsed:
----------------------------------------------------------------------
lsubstring ("some text", 5)
----------------------------------------------------------------------
-[Parser] tests/builtin/Builtin-String.ycp:65 Warning: lsubstring(...) is deprecated, please fix
+[Parser] tests/builtin/Builtin-String.ycp:69 Warning: lsubstring(...) is deprecated, please fix
Parsed:
----------------------------------------------------------------------
lsubstring ("some text", 42)
----------------------------------------------------------------------
-[Interpreter] tests/builtin/Builtin-String.ycp:65 Substring index out of range
-[Parser] tests/builtin/Builtin-String.ycp:66 Warning: lsubstring(...) is deprecated, please fix
+[Interpreter] tests/builtin/Builtin-String.ycp:69 Substring index out of range
+[Parser] tests/builtin/Builtin-String.ycp:70 Warning: lsubstring(...) is deprecated, please fix
Parsed:
----------------------------------------------------------------------
lsubstring ("ěščřžýáí", 5)
----------------------------------------------------------------------
-[Parser] tests/builtin/Builtin-String.ycp:68 Warning: lsubstring(...) is deprecated, please fix
+[Parser] tests/builtin/Builtin-String.ycp:72 Warning: lsubstring(...) is deprecated, please fix
Parsed:
----------------------------------------------------------------------
lsubstring ("some text", 5, 2)
----------------------------------------------------------------------
-[Parser] tests/builtin/Builtin-String.ycp:69 Warning: lsubstring(...) is deprecated, please fix
+[Parser] tests/builtin/Builtin-String.ycp:73 Warning: lsubstring(...) is deprecated, please fix
Parsed:
----------------------------------------------------------------------
lsubstring ("some text", 42, 2)
----------------------------------------------------------------------
-[Interpreter] tests/builtin/Builtin-String.ycp:69 Substring index out of range
-[Parser] tests/builtin/Builtin-String.ycp:70 Warning: lsubstring(...) is deprecated, please fix
+[Interpreter] tests/builtin/Builtin-String.ycp:73 Substring index out of range
+[Parser] tests/builtin/Builtin-String.ycp:74 Warning: lsubstring(...) is deprecated, please fix
Parsed:
----------------------------------------------------------------------
lsubstring ("ěščřžýáí", 5, 2)
@@ -174,9 +191,9 @@
----------------------------------------------------------------------
mergestring (["abc", "dev", "ghi", ""], "/")
----------------------------------------------------------------------
-[Parser] tests/builtin/Builtin-String.ycp:77 No match for 'mergestring : <unspec> (list, string)'
-[Parser] tests/builtin/Builtin-String.ycp:77 Please fix parameter types to match one of:
-[Parser] tests/builtin/Builtin-String.ycp:77 'mergestring : string (const list <string>, string)'
-[Parser] tests/builtin/Builtin-String.ycp:77 Wrong parameters in call to mergestring(...)
-[Parser] tests/builtin/Builtin-String.ycp:77 Expected '(const list <string>, string)', seen '(list, string)'.
+[Parser] tests/builtin/Builtin-String.ycp:81 No match for 'mergestring : <unspec> (list, string)'
+[Parser] tests/builtin/Builtin-String.ycp:81 Please fix parameter types to match one of:
+[Parser] tests/builtin/Builtin-String.ycp:81 'mergestring : string (const list <string>, string)'
+[Parser] tests/builtin/Builtin-String.ycp:81 Wrong parameters in call to mergestring(...)
+[Parser] tests/builtin/Builtin-String.ycp:81 Expected '(const list <string>, string)', seen '(list, string)'.
runycp: parser error
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-core-3.1.22/libycp/testsuite/tests/builtin/Builtin-String.out new/yast2-core-3.1.23/libycp/testsuite/tests/builtin/Builtin-String.out
--- old/yast2-core-3.1.22/libycp/testsuite/tests/builtin/Builtin-String.out 2016-03-03 13:08:09.000000000 +0100
+++ new/yast2-core-3.1.23/libycp/testsuite/tests/builtin/Builtin-String.out 2016-06-03 09:31:47.000000000 +0200
@@ -27,6 +27,10 @@
("")
("te")
("")
+("")
+("")
+("text")
+("text")
("** lsubstring **")
("text")
("")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-core-3.1.22/libycp/testsuite/tests/builtin/Builtin-String.ycp new/yast2-core-3.1.23/libycp/testsuite/tests/builtin/Builtin-String.ycp
--- old/yast2-core-3.1.22/libycp/testsuite/tests/builtin/Builtin-String.ycp 2016-03-03 13:08:09.000000000 +0100
+++ new/yast2-core-3.1.23/libycp/testsuite/tests/builtin/Builtin-String.ycp 2016-06-03 09:31:47.000000000 +0200
@@ -58,6 +58,10 @@
(substring ("some text", 5, 2))
(substring ("some text", 42, 2))
+(substring ("some text", -1))
+(substring ("some text", 5, 0))
+(substring ("some text", 5, 42))
+(substring ("some text", 5, -42))
("** lsubstring **")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-core-3.1.22/package/yast2-core.changes new/yast2-core-3.1.23/package/yast2-core.changes
--- old/yast2-core-3.1.22/package/yast2-core.changes 2016-03-03 13:08:09.000000000 +0100
+++ new/yast2-core-3.1.23/package/yast2-core.changes 2016-06-03 09:31:47.000000000 +0200
@@ -1,4 +1,11 @@
-------------------------------------------------------------------
+Thu Jun 2 13:46:02 UTC 2016 - mvidner@suse.com
+
+- Optionally build with Clang instead of GCC (via bcond_with clang)
+- Fixed most of Clang warnings (bsc#982942)
+- 3.1.23
+
+-------------------------------------------------------------------
Thu Mar 3 12:36:06 CET 2016 - gs@suse.de
- Add missing newline to error messages (bsc#969236)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/yast2-core-3.1.22/package/yast2-core.spec new/yast2-core-3.1.23/package/yast2-core.spec
--- old/yast2-core-3.1.22/package/yast2-core.spec 2016-03-03 13:08:09.000000000 +0100
+++ new/yast2-core-3.1.23/package/yast2-core.spec 2016-06-03 09:31:47.000000000 +0200
@@ -15,6 +15,9 @@
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
+# Optionally build with llvm-clang instead of gcc
+# because we are interested in the warnings it gives.
+%bcond_with clang
# Optionally treat C/C++ warnings as errors.
# It is off by default so that it will not block mass tests of new GCC
@@ -23,7 +26,7 @@
%bcond_with werror
Name: yast2-core
-Version: 3.1.22
+Version: 3.1.23
Release: 0
Url: https://github.com/yast/yast-core
@@ -32,7 +35,11 @@
# obviously
BuildRequires: boost-devel
+%if %{with clang}
+BuildRequires: llvm-clang
+%else
BuildRequires: gcc-c++
+%endif
BuildRequires: libtool
# we have a parser
BuildRequires: bison
@@ -103,6 +110,14 @@
export CXXFLAGS="${RPM_OPT_FLAGS} -Werror"
%endif
+%if %{with clang}
+export CC=clang CXX=clang++
+
+# warning/error: argument unused during compilation
+CFLAGS="${CFLAGS/-grecord-gcc-switches/}"
+CXXFLAGS="${CXXFLAGS/-grecord-gcc-switches/}"
+%endif
+
%yast_build
%install