Commit c497284c by Martin Liska Committed by Martin Liska

Call BUILT_IN_ASAN_HANDLE_NO_RETURN before BUILT_IN_UNWIND_RESUME (PR sanitizer/81021).

2017-06-30  Martin Liska  <mliska@suse.cz>

	PR sanitizer/81021
	* g++.dg/asan/pr81021.C: New test.
2017-06-30  Martin Liska  <mliska@suse.cz>

	PR sanitizer/81021
	* tree-eh.c (lower_resx): Call BUILT_IN_ASAN_HANDLE_NO_RETURN
	before BUILT_IN_UNWIND_RESUME when ASAN is used.

From-SVN: r249833
parent 516fa894
2017-06-30 Martin Liska <mliska@suse.cz>
PR sanitizer/81021
* tree-eh.c (lower_resx): Call BUILT_IN_ASAN_HANDLE_NO_RETURN
before BUILT_IN_UNWIND_RESUME when ASAN is used.
2017-06-30 Yvan Roux <yvan.roux@linaro.org>
* doc/invoke.texi (AArch64): Add missing options and remove redundant
......
2017-06-30 Martin Liska <mliska@suse.cz>
PR sanitizer/81021
* g++.dg/asan/pr81021.C: New test.
2017-06-30 Richard Biener <rguenther@suse.de>
PR tree-optimization/81249
......
// { dg-do run }
#include <string>
struct ConfigFile {
ConfigFile(std::string filename, std::string delimiter) { throw "error"; }
ConfigFile(std::string filename) {}
};
struct Configuration {
ConfigFile _configFile;
Configuration(const std::string &root, const char *baseName)
: _configFile(root + baseName, "=") { }
Configuration(const std::string &root, const char *a, const char *b)
: _configFile(root + a + b) { }
};
void test() {
std::string root("etc");
try {
Configuration config(root, "notthere");
}
catch (...) {
// exception is thrown, caught here and ignored...
}
Configuration config(root, "a", "b"); // ASAN error during constructor here
}
int main(int argc, const char *argv[]) {
test();
}
......@@ -43,6 +43,7 @@ along with GCC; see the file COPYING3. If not see
#include "langhooks.h"
#include "cfgloop.h"
#include "gimple-low.h"
#include "asan.h"
/* In some instances a tree and a gimple need to be stored in a same table,
i.e. in hash tables. This is a structure to do this. */
......@@ -3302,6 +3303,18 @@ lower_resx (basic_block bb, gresx *stmt,
gimple_call_set_lhs (x, var);
gsi_insert_before (&gsi, x, GSI_SAME_STMT);
/* When exception handling is delegated to a caller function, we
have to guarantee that shadow memory variables living on stack
will be cleaner before control is given to a parent function. */
if (sanitize_flags_p (SANITIZE_ADDRESS))
{
tree decl
= builtin_decl_implicit (BUILT_IN_ASAN_HANDLE_NO_RETURN);
gimple *g = gimple_build_call (decl, 0);
gimple_set_location (g, gimple_location (stmt));
gsi_insert_before (&gsi, g, GSI_SAME_STMT);
}
fn = builtin_decl_implicit (BUILT_IN_UNWIND_RESUME);
x = gimple_build_call (fn, 1, var);
gsi_insert_before (&gsi, x, GSI_SAME_STMT);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment